$30 off During Our Annual Pro Sale. View Details »

SwiftFriendlyObjective-C/try! Swift Tokyo 2017 RejectCon

SwiftFriendlyObjective-C/try! Swift Tokyo 2017 RejectCon

Noritaka Kamiya

February 28, 2017
Tweet

More Decks by Noritaka Kamiya

Other Decks in Programming

Transcript

  1. SwiftϑϨϯυϦʔObjective-C
    @nolili
    Noritaka Kamiya

    View Slide

  2. View Slide

  3. View Slide

  4. View Slide

  5. View Slide

  6. Swift❤
    Objective-C❤

    View Slide

  7. try! Swift
    SwiftϑϨϯυϦʔObjective-C

    View Slide

  8. try! Swift
    EXC_BAD_INSTRUCTION

    View Slide

  9. try! Swift
    EXC_BAD_INSTRUCTION
    Rejected

    View Slide

  10. Swift❤
    Objective-C❤

    View Slide

  11. جຊ

    View Slide

  12. Nullability

    View Slide

  13. @interface Memo : NSObject
    @property (nonatomic) NSDate *createdAt;
    @property (nonatomic) NSString *text;
    @property (nonatomic) NSArray *images;
    @end
    Nullability

    View Slide

  14. Nullability
    open class Memo : NSObject {
    open var createdAt: Date!
    open var text: String!
    open var images: [Any]!
    }

    View Slide

  15. @interface Memo : NSObject
    @property (nonatomic, nonnull) NSDate *createdAt;
    @property (nonatomic, nonnull) NSString *text;
    @property (nonatomic, nonnull) NSArray *images;
    @end
    Nullability

    View Slide

  16. open class Memo : NSObject {
    open var createdAt: Date
    open var text: String
    open var images: [Any]
    }
    Nullability

    View Slide

  17. NS_ASSUME_NONNULL_BEGIN
    @interface Memo : NSObject
    @property (nonatomic) NSDate *createdAt;
    @property (nonatomic) NSString *text;
    @property (nonatomic) NSArray *images;
    @end
    NS_ASSUME_NONNULL_END
    Nullability

    View Slide

  18. LightWeight Generics

    View Slide

  19. LightWeight Generics
    NS_ASSUME_NONNULL_BEGIN
    @interface Memo : NSObject
    @property (nonatomic) NSDate *createdAt;
    @property (nonatomic) NSString *text;
    @property (nonatomic) NSArray *images;
    @end
    NS_ASSUME_NONNULL_END

    View Slide

  20. open class Memo : NSObject {
    open var createdAt: Date
    open var text: String
    open var images: [Any]
    }
    Nullability

    View Slide

  21. LightWeight Generics
    NS_ASSUME_NONNULL_BEGIN
    @interface Memo : NSObject
    @property (nonatomic) NSDate *createdAt;
    @property (nonatomic) NSString *text;
    @property (nonatomic) NSArray *images;
    @end
    NS_ASSUME_NONNULL_END

    View Slide

  22. LightWeight Generics
    open class Memo : NSObject {
    open var createdAt: Date
    open var text: String
    open var images: [UIImage]
    }

    View Slide

  23. ΞϊςʔγϣϯͰSwiftଆ΁ؾ࣋ͪΛද໌͢Δ

    View Slide

  24. Blocks / Closure

    View Slide

  25. memo.save { _ in }
    TrailingClosure
    typedef void (^SomeCompletionHandler)(NSString *);
    @interface Memo : NSObject
    - (void)save:(SomeCompletionHandler)handler;
    @end

    View Slide

  26. Closure
    typedef void (^SomeCompletionHandler)(NSString *);
    @interface Memo : NSObject
    - (void)save:(nullable SomeCompletionHandler)handler;
    @end
    memo.save()

    View Slide

  27. noescape
    typedef void (^SomeCompletionHandler)(NSString *);
    @interface Notes : NSObject
    + (void)save:(__attribute__((noescape)) SomeCompletionHandler)handler;
    @end
    memo.save { _ in
    someSelfMethod() // self. ෆཁ
    }

    View Slide

  28. Error/Exception

    View Slide

  29. Error
    + (BOOL)send:(NSError **)error;
    open class func send() throws

    View Slide

  30. @throw
    @try
    @catch
    @finally

    View Slide

  31. @throw
    @try
    @catch
    @finally
    X

    View Slide

  32. w $PEJOH(VJEFMJOFTGPS$PDPBʹԊͬͯॻ͘
    w (FOFSBUFE*OUFSGBDFΛΈΔ
    w 4UBUJD"OBMZ[FSΛ׆༻͢Δ
    w 4XJGU͔ΒJNQPSUͯ͠ΈΔ
    w ͔͍͍ͬ͜0CKFDUJWF$͸4XJGU͔ΒΈͯ΋͔͍͍ͬ͜
    ৺͕͚͍ͯΔ͜ͱ

    View Slide

  33. View Slide

  34. View Slide

  35. View Slide

  36. View Slide

  37. w $PDPBίʔσΟϯάΨΠυϥΠϯʹԊͬͯॻ͘
    w (FOFSBUFE*OUFSGBDFΛΈΔ
    w 4UBUJD"OBMZ[FSΛ׆༻͢Δ
    w 4XJGU͔ΒJNQPSUͯ͠ΈΔ
    w ͔͍͍ͬ͜0CKFDUJWF$͸4XJGU͔ΒΈͯ΋͔͍͍ͬ͜
    ৺͕͚͍ͯΔ͜ͱ

    View Slide

  38. SwiftϑϨϯυϦʔObjective-C
    @nolili
    Noritaka Kamiya

    View Slide