28
Welcome to Swift Kyohei Ito

Wolcome to swift

Embed Size (px)

DESCRIPTION

Swiftの紹介資料です。 社内向けなので雑な部分もあります。

Citation preview

Page 1: Wolcome to swift

Welcome to SwiftKyohei Ito

Page 2: Wolcome to swift

自己紹介

伊藤 恭平(31) !福岡IT土方 → 福岡ITベンチャー → CA@福岡 → CA@東京 !2011年11月 入社 入社直後 iOSエンジニア 3ヶ月後 フロントエンドエンジニア 途中 サーバJavaをかじる 1年半後 iOSエンジニア 途中 Androidをかじる

Page 3: Wolcome to swift

About Swift

Page 4: Wolcome to swift

Swift 1.0

2010年に開発が始まった

実行環境はiOS 7 以降

「モダン、安全、高速、インタラクティブ」

いいとこ取りな言語仕様

Page 5: Wolcome to swift

高速

パフォーマンスを前提に設計

Objective-Cを凌ぐ実行速度

Page 6: Wolcome to swift

インタラクティブ

対話実行環境(REPL)

Playground

Page 7: Wolcome to swift

言語仕様

全部入り

Page 8: Wolcome to swift

Swift for iOS

Page 9: Wolcome to swift

実装設計

cocoa frameworkはそのまま

c言語は書けない

Page 10: Wolcome to swift

ハマりどころ

ネットの情報を鵜呑みにできない

Page 11: Wolcome to swift

// Array !var numbers: Int[] = [1, 2, 3] // NG !var numbers: [Int] = [1, 2, 3] // OK

Page 12: Wolcome to swift

// Dictionary !var object: Dictionary<String, AnyObject?> = ["key1": "A", "key2": 1] // deprecate !var object: [String: AnyObject?] = ["key1": "A", "key2": 1] // OK

Page 13: Wolcome to swift

ハマりどころ

Optionalの出現

詳しくはこちら

Page 14: Wolcome to swift

// Optional !var firstName: String = nil // build error

Page 15: Wolcome to swift

// Optional !func printString(string: String) { println("\(string)") } !var lastName: String? = nil !var name: String! = nil !printString(lastName) // build error !printString(name) // runtime error

Page 16: Wolcome to swift

ハマりどころ

根底のクラスがstructに変更

Array ≠ NSArray String ≠ NSString

Dictionary ≠ NSDictionary

Page 17: Wolcome to swift

Swift / Objective-c

Page 18: Wolcome to swift

SwiftからObjective-cを参照

${PRODUCT_NAME}-Bridging-Header.hに必要なヘッダをimportする

イニシャライザの呼び方が変更

enumの値の取得が変更

Page 19: Wolcome to swift

// // 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する

Page 20: Wolcome to swift

// MyClass.h - (id)initWithAttributes:(NSDictionary *)attributes; !// Objective-c [[MyClass alloc] initWithAttributes:@{ @"key": @“value”}]; !// Swift MyClass(attributes: ["key": "value"])

イニシャライザの呼び方が変更

Page 21: Wolcome to swift

// MyHTTP.h typedef NS_ENUM (NSInteger, HTTPStatus) { HTTPStatusUnknown = 0, HTTPStatusSuccess = 200, HTTPStatusBadRequest = 400, HTTPStatusServerError = 500 }; !!//MyHTTP.swift var status: HTTPStatus = .Success HTTPStatus.Success

enumの値の取得が変更

Page 22: Wolcome to swift

Objective-cからSwiftを参照

${PRODUCT_NAME}-Swift.hをimportする

コードのどこかにインナークラスがあるとビルドエラー

enumがどっか行っちゃう

定数が定義できない

Page 23: Wolcome to swift

// // Human.swift // Playground // !import UIKit !let HumanName = "joe" !@objc class Human { enum Gender { case male case female } @objc class Person { @objc class Employ { } } }

Swiftの定義

Page 24: Wolcome to swift

// // MyClass.m // Playground // !#import "MyClass.h" #import "Playground-Swift.h" !@implementation MyClass !@end

Objective-cの定義

Page 25: Wolcome to swift

// // 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の中

Page 26: Wolcome to swift

やってること

Objective-cも使うのでプレフィックスはつける

NSObjectのサブクラスにする

どれでも良いがJSONのパーサを使う

SwiftのSyntaxを意識する

Page 28: Wolcome to swift

ご静聴ありがとうございました