Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Safer Networking Layer With Swift

Safer Networking Layer With Swift

Yusei Nishiyama

July 14, 2015
Tweet

More Decks by Yusei Nishiyama

Other Decks in Technology

Transcript

  1. 4BGFS
    /FUXPSLJOH
    -BZFSXJUI
    4XJGU

    View Slide

  2. 8IPBN*
    w :VTFJ/JTIJZBNB
    !ZVTFJOJTIJZBNB

    w J04EFWFMPQFSZFBST
    w $PPLQBE
    w *OUFSOBUJPOBMHSPVQ
    w -FBSOJOH&OHMJTI

    View Slide

  3. (MPCBM

    View Slide

  4. 1MFBTFGPSHJWFNF

    View Slide

  5. 5IJTJTB3VCZ
    NFFUVQ

    View Slide

  6. #VU*`Nʜ
    wXPSLJOHGPSBOJ04
    BQQMJDBUJPO
    w*IBWFWFSZMJUUMF
    FYQFSJFODFPG3BJMT
    3VCZBTXFMM

    View Slide

  7. "T"NPCJMF
    EFWFMPQFS *XBOU
    ZPVUPLOPXBCPVUʜ

    View Slide

  8. 4XJGU

    View Slide

  9. 8IZTIPVMEXF
    VTF4XJGU

    View Slide

  10. [CKDPantrymanInitializer setVariables];
    [[CKDPushNotificationManager sharedManager] start];
    [[CKDPushNotificationManager sharedManager] registerForRemoteNotification];
    [[CKDBargainManager sharedManager] start];
    [[CKDDeviceTrackingManager sharedManager] start];
    [[CKDInitializeConfigManager sharedManager] start];
    [[CKDSupportContactsManager sharedManager] start];
    [[CKDAccountManager sharedManager] migrateStoredAccount];
    [[CKDGoogleAnalyticsManager sharedManager] startTracking];
    [[CKDHistoryManager sharedManager] load];
    [[CKDRecipesManager sharedManager] load];
    #FDBVTFPG0CKFDUJWF$
    TZOUBY
    /P JU`TOPU

    4FFUIFHFPNFUSJDCFBVUZ

    View Slide

  11. 0CKFDUJWF$JTMJLF3VCZ
    wEZOBNJDEJTQBUDI
    wEZOBNJDUZQJOH
    wSFqFDUJPONFUIPET
    wSVOUJNFIBDLFSZ

    View Slide

  12. 1SPT
    w-FTTWFSCPTF
    w:PVDBOTFFZPVSSFTVMU
    JNNFEJBUFMZ
    w'BTURVJDLEFWFMPQNFOU
    DZDMFTBOEQSPUPUZQJOH

    View Slide

  13. 1SPT
    NSArray *array = @[[Recipe new]];
    BOOL boolValue = [array[0] boolValue];
    :PVDBOEPBOZUIJOHZPVXBOUUP
    4VQFSC
    name = "John"
    name = Time.now()
    name = 123.45

    View Slide

  14. View Slide

  15. $POT
    w$SBTIFTPOl3VOUJNFz
    w1PPSQFSGPSNBODF
    w1PPSJOUFHSBUJPOXJUI
    *%&T

    View Slide

  16. 8PSLJOHPOJ04

    View Slide

  17. 8FIBWFUIFQSFUUZ
    OJDFQBSUOFS
    You can’t release
    such a crap!
    Wait until I finish
    reviewing
    There are no
    exceptions

    View Slide

  18. View Slide

  19. View Slide

  20. http://appreviewtimes.com/

    View Slide

  21. J040CKFDUJWF$
    w&SSPSQSPOF
    w)BSEUPSFDPWFS

    View Slide

  22. .BLFFWFSZUIJOH
    NPSFSFMJBCMF

    View Slide

  23. 4XJGU

    View Slide

  24. 4XJGU
    w5ZQFTBGF
    w/VMMTBGF
    w:PVDBOpOETPNFUIJOH
    XSPOHPOlDPNQJMF
    UJNFz

    View Slide

  25. /FUXPSLJOH

    View Slide

  26. *O0CKFDUJWF$
    NSDictionary *parameters = @{
    @"page": @(page),
    @"per_page": @10,
    };
    [client requestGetWithPath:path
    parameters:parameters
    completion:^(NSArray *recipes, NSError *error) {
    if (nil == error) {
    } else {
    }
    }];
    There are 4 possibilities
    The type of response is
    determined dynamically
    SFDJQFTOJM SFDJQFTOJM
    FSSPSOJM GBJMVSF
    FSSPSOJM TVDDFTT

    View Slide

  27. *O4XJGU
    let params = PaginationParams(order: .Desc(field: .Publish), page: 1, perPage:
    10)
    let api = APIs.Recipes.Get(paginationParams: params)
    SharedAPIClient.sendRequest(api) { response in
    switch response {
    case .Success(let value):
    value[0].cookingTime
    case .Failure(let value):
    value.message
    }
    }
    The type of the response can
    be determined statically
    You can handle success and failure exhaustively

    View Slide

  28. &OVN
    enum Order : Printable {
    enum Field: Printable {
    case Update, Publish
    var description: String {
    switch self {
    case .Update:
    return "updated_at"
    case .Publish:
    return "published_at"
    }
    }
    }
    case Desc(field: Field), Asc(field: Field)
    var description: String {
    switch self {
    case .Desc(let field):
    return "\(field)_desc"
    case .Asc(let field):
    return "\(field)_asc"
    }
    }
    }
    Enum can conform protocols
    Enum can have properties
    and functions
    You can associate a value with
    an enum
    let params = PaginationParams(order: .Desc(field: .Publish), page: 1, perPage: 10)

    View Slide

  29. 1SPUPDPM
    protocol API {
    typealias ResponseType
    class Recipes {
    class Get: API {
    typealias ResponseType = PagedRecipes
    Associated Types
    A type conform the protocol
    can determine an actual type

    View Slide

  30. (FOFSJDT
    func sendRequest(API: T, handler: (T.ResponseType) -> Void)
    Generic functions Associated Types

    View Slide

  31. &JUIFS
    public enum Result {
    case Success(T)
    case Failure(E)
    }
    Generics
    Enum with associated value

    View Slide

  32. /VMMBCJMJUZ

    *NNVUBCJMJUZ
    struct Recipe {
    var id: Int?
    var title = ""
    let user: User
    This can be nil
    This is immutable
    This can’t be nil
    and has default value
    This can’t be nil

    View Slide

  33. 1VUFWFSZUIJOHUPHFUIFS
    let params = PaginationParams(order: .Desc(field: .Publish), page: 1, perPage: 10)
    let api = APIs.Recipes.Get(paginationParams: params)
    SharedAPIClient.sendRequest(api) { response in
    switch response {
    case .Success(let value):
    value[0].cookingTime
    case .Failure(let value):
    value.message
    }
    }
    Enum
    Nested Classes
    Either Associated Value
    Protocol With
    Associated Type

    View Slide

  34. 4VNNBSZ

    View Slide

  35. w0CKFDUJWF$˺3VCZ
    w0CKFDUJWF$4XJGU
    w3VCZ4XJGU
    w4XJGUNBLFTZPVS
    BQQMJDBUJPOTSFMJBCMF

    View Slide

  36. View Slide

  37. *T4XJGU
    QSPEVDUJPO
    RVBMJUZ

    View Slide

  38. 0GDPVSTF
    w0VS JOUFSOBUJPOBM
    J04
    BQQMJDBUJPODPOTJTUTPG
    4XJGU
    w*SFXSPUFBMNPTUPGUIF
    0CKFDUJWF$DPEFJOUP
    4XJGUPSNPOUIBHP

    View Slide

  39. ૣ͘͠Ζ
    Hurry up!
    Date prisa!
    اولجع!
    Cepatlah!

    View Slide

  40. 8FBSFIJSJOH

    View Slide

  41. "OZRVFTUJPOT

    View Slide