https://rmp-quipper.connpass.com/event/49316/
SwiftϑϨϯυϦʔObjective-C@noliliNoritaka Kamiya
View Slide
Swift❤Objective-C❤
try! SwiftSwiftϑϨϯυϦʔObjective-C
try! SwiftEXC_BAD_INSTRUCTION
try! SwiftEXC_BAD_INSTRUCTIONRejected
جຊ
Nullability
@interface Memo : NSObject@property (nonatomic) NSDate *createdAt;@property (nonatomic) NSString *text;@property (nonatomic) NSArray *images;@endNullability
Nullabilityopen class Memo : NSObject {open var createdAt: Date!open var text: String!open var images: [Any]!}
@interface Memo : NSObject@property (nonatomic, nonnull) NSDate *createdAt;@property (nonatomic, nonnull) NSString *text;@property (nonatomic, nonnull) NSArray *images;@endNullability
open class Memo : NSObject {open var createdAt: Dateopen var text: Stringopen var images: [Any]}Nullability
NS_ASSUME_NONNULL_BEGIN@interface Memo : NSObject@property (nonatomic) NSDate *createdAt;@property (nonatomic) NSString *text;@property (nonatomic) NSArray *images;@endNS_ASSUME_NONNULL_ENDNullability
LightWeight Generics
LightWeight GenericsNS_ASSUME_NONNULL_BEGIN@interface Memo : NSObject@property (nonatomic) NSDate *createdAt;@property (nonatomic) NSString *text;@property (nonatomic) NSArray *images;@endNS_ASSUME_NONNULL_END
LightWeight Genericsopen class Memo : NSObject {open var createdAt: Dateopen var text: Stringopen var images: [UIImage]}
ΞϊςʔγϣϯͰSwiftଆؾ࣋ͪΛද໌͢Δ
Blocks / Closure
memo.save { _ in }TrailingClosuretypedef void (^SomeCompletionHandler)(NSString *);@interface Memo : NSObject- (void)save:(SomeCompletionHandler)handler;@end
Closuretypedef void (^SomeCompletionHandler)(NSString *);@interface Memo : NSObject- (void)save:(nullable SomeCompletionHandler)handler;@endmemo.save()
noescapetypedef void (^SomeCompletionHandler)(NSString *);@interface Notes : NSObject+ (void)save:(__attribute__((noescape)) SomeCompletionHandler)handler;@endmemo.save { _ insomeSelfMethod() // self. ෆཁ}
Error/Exception
Error+ (BOOL)send:(NSError **)error;open class func send() throws
@throw@try@catch@finally
@throw@try@catch@finallyX
w $PEJOH(VJEFMJOFTGPS$PDPBʹԊͬͯॻ͘w (FOFSBUFE*OUFSGBDFΛΈΔw 4UBUJD"OBMZ[FSΛ׆༻͢Δw 4XJGU͔ΒJNQPSUͯ͠ΈΔw ͔͍͍ͬ͜0CKFDUJWF$4XJGU͔ΒΈ͔͍͍ͯͬ͜৺͕͚͍ͯΔ͜ͱ
w $PDPBίʔσΟϯάΨΠυϥΠϯʹԊͬͯॻ͘w (FOFSBUFE*OUFSGBDFΛΈΔw 4UBUJD"OBMZ[FSΛ׆༻͢Δw 4XJGU͔ΒJNQPSUͯ͠ΈΔw ͔͍͍ͬ͜0CKFDUJWF$4XJGU͔ΒΈ͔͍͍ͯͬ͜৺͕͚͍ͯΔ͜ͱ