Upload
kyohei-ito
View
169
Download
0
Embed Size (px)
DESCRIPTION
Swiftの紹介資料です。 社内向けなので雑な部分もあります。
Citation preview
Welcome to SwiftKyohei Ito
自己紹介
伊藤 恭平(31) !福岡IT土方 → 福岡ITベンチャー → CA@福岡 → CA@東京 !2011年11月 入社 入社直後 iOSエンジニア 3ヶ月後 フロントエンドエンジニア 途中 サーバJavaをかじる 1年半後 iOSエンジニア 途中 Androidをかじる
About Swift
Swift 1.0
2010年に開発が始まった
実行環境はiOS 7 以降
「モダン、安全、高速、インタラクティブ」
いいとこ取りな言語仕様
高速
パフォーマンスを前提に設計
Objective-Cを凌ぐ実行速度
インタラクティブ
対話実行環境(REPL)
Playground
言語仕様
全部入り
Swift for iOS
実装設計
cocoa frameworkはそのまま
c言語は書けない
ハマりどころ
ネットの情報を鵜呑みにできない
// Array !var numbers: Int[] = [1, 2, 3] // NG !var numbers: [Int] = [1, 2, 3] // OK
// Dictionary !var object: Dictionary<String, AnyObject?> = ["key1": "A", "key2": 1] // deprecate !var object: [String: AnyObject?] = ["key1": "A", "key2": 1] // OK
// Optional !var firstName: String = nil // build error
// Optional !func printString(string: String) { println("\(string)") } !var lastName: String? = nil !var name: String! = nil !printString(lastName) // build error !printString(name) // runtime error
ハマりどころ
根底のクラスがstructに変更
Array ≠ NSArray String ≠ NSString
Dictionary ≠ NSDictionary
Swift / Objective-c
SwiftからObjective-cを参照
${PRODUCT_NAME}-Bridging-Header.hに必要なヘッダをimportする
イニシャライザの呼び方が変更
enumの値の取得が変更
// // Playground-Bridging-Header.h // !#ifdef __OBJC__ #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #endif !#import <ASFoundation/ASFoundation.h> #import <AMBTableViewController/AMBTableViewController.h> #import <SDWebImage/UIImageView+WebCache.h> !#import "Utility.h" #import "Appearance.h"
${PRODUCT_NAME}-Bridging-Header.hに必要なヘッダをimportする
// MyClass.h - (id)initWithAttributes:(NSDictionary *)attributes; !// Objective-c [[MyClass alloc] initWithAttributes:@{ @"key": @“value”}]; !// Swift MyClass(attributes: ["key": "value"])
イニシャライザの呼び方が変更
// MyHTTP.h typedef NS_ENUM (NSInteger, HTTPStatus) { HTTPStatusUnknown = 0, HTTPStatusSuccess = 200, HTTPStatusBadRequest = 400, HTTPStatusServerError = 500 }; !!//MyHTTP.swift var status: HTTPStatus = .Success HTTPStatus.Success
enumの値の取得が変更
Objective-cからSwiftを参照
${PRODUCT_NAME}-Swift.hをimportする
コードのどこかにインナークラスがあるとビルドエラー
enumがどっか行っちゃう
定数が定義できない
// // Human.swift // Playground // !import UIKit !let HumanName = "joe" !@objc class Human { enum Gender { case male case female } @objc class Person { @objc class Employ { } } }
Swiftの定義
// // MyClass.m // Playground // !#import "MyClass.h" #import "Playground-Swift.h" !@implementation MyClass !@end
Objective-cの定義
// // Playground-Swift.h // !@class Person; !SWIFT_CLASS("_TtC10Playground5Human") @interface Human SWIFT_CLASS("_TtCC10Playground5Human6Person") @interface Person SWIFT_CLASS("_TtCCC10Playground5Human6Person6Employ") @interface Employ - (instancetype)init OBJC_DESIGNATED_INITIALIZER; @end - (instancetype)init OBJC_DESIGNATED_INITIALIZER; @end - (instancetype)init OBJC_DESIGNATED_INITIALIZER; @end
${PRODUCT_NAME}-Swift.hの中
やってること
Objective-cも使うのでプレフィックスはつける
NSObjectのサブクラスにする
どれでも良いがJSONのパーサを使う
SwiftのSyntaxを意識する
JSONパーサ
swift-json
json-swift
SwiftyJSON
JSONマッパー(宣伝)
G3JSON
詳しくはこちら
ご静聴ありがとうございました