diff options
author | Tobias Markmann <tm@ayena.de> | 2016-03-09 14:38:57 (GMT) |
---|---|---|
committer | Tobias Markmann <tm@ayena.de> | 2016-03-15 15:53:03 (GMT) |
commit | f7de41c770be1bc6c45e825ff0fbdd6bfb799fae (patch) | |
tree | 60f7802290dd1d06399f7a7c59fa621046321e18 /SwifTools/Cocoa | |
parent | 8cdebcff1d1e8321b070c7e675f9a9709a2b0b81 (diff) | |
download | swift-f7de41c770be1bc6c45e825ff0fbdd6bfb799fae.zip swift-f7de41c770be1bc6c45e825ff0fbdd6bfb799fae.tar.bz2 |
Explicitly convert between nullable and non-nullable on OS X
Clang was complaining about implicit conversions between
nullable and non-nullable NSString pointers. Adjusted our
std::string -> NSString* conversion utilities to check for
nil and return an empty std::string in that case.
Replaced uses of [NSString stringWithUTF8String] with our
STD2NSSTRING macro.
Turned std::string <-> NSString* conversion macros into
functions.
Test-Information:
Builds without the warning on OS X 10.11.3 and Swift runs
without issues.
Change-Id: I949f2f3332018391aead58ef362764f4b7955b01
Diffstat (limited to 'SwifTools/Cocoa')
-rw-r--r-- | SwifTools/Cocoa/CocoaUtil.h | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/SwifTools/Cocoa/CocoaUtil.h b/SwifTools/Cocoa/CocoaUtil.h index 49ed682..83d95b6 100644 --- a/SwifTools/Cocoa/CocoaUtil.h +++ b/SwifTools/Cocoa/CocoaUtil.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011 Isode Limited. + * Copyright (c) 2011-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -7,16 +7,36 @@ #pragma once // Conversion utilities -#define NS2STDSTRING(a) (a == nil ? std::string() : std::string([a cStringUsingEncoding:NSUTF8StringEncoding])) -#define STD2NSSTRING(a) [NSString stringWithCString:a.c_str() encoding:NSUTF8StringEncoding] +namespace { + +inline std::string ns2StdString(NSString* _Nullable nsString); +inline std::string ns2StdString(NSString* _Nullable nsString) { + std::string stdString; + if (nsString != nil) { + stdString = std::string([nsString cStringUsingEncoding:NSUTF8StringEncoding]); + } + return stdString; +} + +inline NSString* _Nonnull std2NSString(const std::string& stdString); +inline NSString* _Nonnull std2NSString(const std::string& stdString) { + NSString* _Nullable nsString = [NSString stringWithUTF8String:stdString.c_str()]; + if (nsString == nil) { + nsString = @""; + } + // At this point nsString is guaranteed to be not null/nil. + return static_cast<NSString* _Nonnull>(nsString); +} + +} // Intrusive pointer for NSObjects namespace boost { - inline void intrusive_ptr_add_ref(NSObject* object) { + inline void intrusive_ptr_add_ref(NSObject* _Nonnull object) { [object retain]; } - inline void intrusive_ptr_release(NSObject* object) { + inline void intrusive_ptr_release(NSObject* _Nonnull object) { [object release]; } } |