SlideShare uma empresa Scribd logo
1 de 82
Baixar para ler offline
東京iOS勉強会
2014.12.25(木)
Swift
入門おさらい∼作ってみて
本題に入る前にちょっとだけ
登壇している者
大内まいこ
といいます
学歴・職歴
• 18歳 埼玉県の三流高校を卒業
• 18歳 大学受験に失敗 
• 19歳 大学受験に失敗 諦めてプログラマーになる
• 20歳 会社を辞めて絵描きになる
• 20代前半 展覧会開催・事業立ち上げその他諸々迷走して散財する
• 25歳 お金がないので再度プログラマーになる
• 27歳 結婚する iOS開発を始める
• 28歳 iOS勉強会を始める
昨年iOSを触り始めて以来
ひたすら業務系アプリを作ってます
どれもこれも一生懸命やったけど
結局よく覚えていない
• Perl
• C
• Java
• PHP
• Python
Objective-C
仲良くなれる気がする!
Swift
もっと仲良くなれそうな
気がする!
猫がすき
よろしくね!
Swift
入門おさらい∼作ってみて
アジェンダ
• Swift 入門おさらい
• Swiftでアプリを作ってみた
Swift 入門 おさらい
• Objective-Cと書き方が違うモノ
• Objective-Cには無かったモノ
Objective-Cと
書き方が違うモノ
Objective-Cと
書き方が違うモノ
• Swiftがなぜ生まれたのか
• プロジェクト作成の風景
• 変数・定数の作り方
• 制御構文
• クラスの作り方
• 構造体の作り方
• 関数の作り方
なんでSwiftなんて
作ったの?
せっかくObjective-C
書けるようになってきたのに!
なんで?
理由1:Fast,Modern,Safe,Interactive
Fast, Modern, Safe, Interactive
• WWDC2014で発表されたSwiftの紹介
• ソートの早さはPythonを基準とするとObjective-Cは2.8倍、
Swiftだと3.9倍の早さ
• JavaやPerlなどを勉強してきた人にとって学習コストが低い
• より強い静的型付け、nilを安全に扱える仕組み(Optional)、
ARCなど
• インタラクティブにソースコードをデバッグできる(REPL,
Playground)
理由2:Objective-Cが使いづらい
Objective-Cが使いづらい
• 今時の言語を習得した人に取っての学習コストが高い
なんでSwiftを作ったの?
• Objective-Cが、言語開発側もiOS開発者もいまい
ち使いづらかった。
• Fast,Modern,Safe,Interactiveな新言語つくっ
た!
プロジェクト作成の風景
Objective-C
Swift
プロジェクト作成の風景
• Swiftでプロジェクトを作成するときは、使用言語
として「Swift」を選択すると必要最低限のファイ
ルを用意してくれる
• ヘッダーファイルと実装ファイルが分かれていない
ので見通しが良さそう
変数・定数の作り方
var hensuu:String = “へんすう”
let teisuu:String = “ていすう”
制御構文
IF文
if item == true {
…
} else if item == false {
…
} else {
…
}
• 多くの言語と大体同じ
• カッコが無い(あっても良い)
• 一行でも中括弧が無いとだめ
while文
while i < 10 {
…
}
do {
…
} while i < 10
for文
for var i = 0; i < 10; i++ {
…

}
for i in 0..<10 {
// 0~9
}
for i in 0…10 {
// 0~10
}
let data = [("Joseph","America"), ("Jotaro","Japan")]
!
for (key, val) in data {
println("(key) is from (val).")
}
switch文
switch country {
case "France":
println("ポワレ!")
case "China":
println("青椒肉絲!")
case "America":
println("にく!")
case "Canada":
println("しゃけ!")
default:
println("麦!")
}
Objective-Cではできなかったオブジェクトが使える!
デフォルトでbreakされるが、
fallthroughで次のcaseも処理できる
switch country {
case "France":
println("ポワレ!")
case "China":
println("青椒肉絲!")
case "America":
println("にく!")
case "Canada":
println("しゃけ!")
fallthrough
default:
println("麦!")
}
クラスの作り方
Objective-C
Swift
クラスの作り方
class ClassName {
!
}
class ClassName: ParentClass {
!
}
継承しない
継承する
こんなこともできる
class className {
!
}
class くらすねーむ {
!
}
class class_name{
!
}
アクセスコントロールももちろんできます
詳しくはのちほど!
private class ClassName {
!
}
インスタンス変数
class ClassName: ParentClass {
var someValue: String =
}
構造体の作り方
Objective-Cと比較
SwiftObjective-C
struct Cat{
char* name;
int* age;
}
struct Cat{
なまえ: 名前
age: Int
}
メソッドの作り方
func hoge(foo:Int, bar:String)->Void {
// 基本
}
!
func fuga(aaa foo:Int, bbb bar:String)->Void {
// ラベルつき
}
!
func hogefuga(foo:Int = 10, bar:String = "")->Void {
// デフォルト値設定
}
!
func fugahoge(foo:Int...)->Void {
// 引数可変長
}
!
hoge(1, "aa")
fuga(aaa: 1, bbb: "ee")
hogefuga(foo: 1, bar: "ee")
fugahoge(1,2,3,4,5,6,7,8)
Objective-Cと書き方が違うモノ
• とっつきやすい!
• コードの量が減りそう!
Objective-Cに
無かったモノ
Objective-Cに無かったモノ
• Optional型
• Implicitly Unwrapped Optional型
• ??演算子
• 型推論
• ジェネリクス
• タプル
Optional型
class ClassName: ParentClass {
var optvar1: Optional<String>
var optvar2: String? // Optional<String>とおなじ!
}
・変数は必ず何か入っていなくちゃいけない
・入っていない場合はイニシャライザで初期化しなきゃいけない
・それもやりたくない場合はOptional型=(nilを許容する変数)
に明示的にしなきゃいけない
Optional型: ラップされている
• 型がOptional<Type>で包まれているのでラップさ
れている、という
• ラップされているので変数を利用するときはアンラッ
プ(=Optional型から元々の方の変数を取り出す)
する必要がある
• Type? という記述で代用できる
Optional型: アンラップする方法
• Forced Unwrapping
• Optional Chaining
• Optional Binding
• 比較演算子
Optional型: Forced Unwrapping
public class WrappedObj {
var someString: String = "ほげほげ"
}
!
public class TestObj {
func callWrapObj {
var wrappedObj:WrappedObj? = WrappedObj()
!
var anotherObj = wrappedObj!.someString;
}
}
public class WrappedObj {
var someString: String = "ほげほげ"
}
!
public class TestObj {
func callWrapObj {
var wrappedObj:WrappedObj? //nil
!
var anotherObj = wrappedObj!.someString;
// -> Runtime error: unexpectedly found nil while unwrapping an Optional value
}
}
ランタイムエラーになる
Optional型: Optional Chaining
public class WrappedObj {
var someString: String = "ほげほげ"
}
!
public class TestObj {
func callWrapObj {
var wrappedObj:WrappedObj? = WrappedObj()
!
var anotherObj = wrappedObj?.someString;
}
}
public class WrappedObj {
var someString: String = "ほげほげ"
}
!
public class TestObj {
func callWrapObj {
var wrappedObj:WrappedObj? //nil
!
var anotherObj = wrappedObj?.someString;
}
}
nilが返される
anotherObjにnilが入ってしまわないのか?
public class WrappedObj {
var someString: String = "ほげほげ"
}
!
public class TestObj {
func callWrapObj {
var wrappedObj:WrappedObj? //nil
!
var anotherObj = wrappedObj?.someString;
}
}
1. wrappedObjがアンラップされる
2. StringのsomeStringが返される
3. someStringがラップされる
4. anotherObjにラップされたsomeStringが代入される
Optional型:Optional Binding
var wrapped: WrappedObj?
if var unwrapped = wrapped {
var anotherString = unwrapped.someString
}
unwrappedがnilだった場合
結果はfalseとなりifの中は実行されない
unwrappedはラップされない
Optional型:比較演算子
• 比較演算子を使う時は自動的にアンラップされる
• wrappedがnilだと比較の結果がfalseになる
var wrapped: Int? = 1;
var result = (wrapped == 0)
Implicitly Unwrapped Optional型
自動的にアンラップされるOptional型
class ClassName: ParentClass {
var optvar3: ImplicitlyUnwrappedOptional<String>
var optvar4: String! // ImplicitlyUnwrappedOptional<String>とおなじ
}
var implWrapped: WrappedObj! = WrappedObj()
var implString = implWrapped.someString;
var implWrapped: WrappedObj! //nil
var implString = implWrapped.someString;
// -> Runtime error: unexpectedly found nil while unwrapping an Optional value
ランタイムエラーになる
??演算子
var result = number != nil ? number : 0
var number:Int? = 1
こういう場合
var result = number ?? 0
=
型推論
var name = "勇者"
var hp = 700
let ratio = 2.5
型を自動的に決めてくれる!
var name:String = "勇者"
var hp:Int = 700
let ratio:Float = 2.5
もちろん明示的に指定もできる
ジェネリクス
メソッド・構造体・プロトコルなどについて
これらを呼び出す側が引数、メンバ、戻り値などの型を
指定できるシステム
var one:Int = 1
var two:Int = 2
var three:Int = 3
!
var m = max(one,two,three)
var one:Float = 1.0
var two:Float = 2.0
var three:Float = 3.0
!
var m = max(one,two,three)
var one:String = "1"
var two:String = "2"
var three:String = "3"
!
var m = max(one,two,three)
ジェネリクス関数
まずはジェネリックではなく
Intを引数にとってIntの配列を返す関数を作ってみる
func repeat(item:Int, times:Int) -> [Int] {
var result = [Int]()
for i in 0...times {
result.append(item)
}
return result
}
func repeat(item:Int, times:Int) -> [Int] {
var result = [Int]()
for i in 0...times {
result.append(item)
}
return result
}
!
repeat(10, 3) //[10,10,10]
repeat(“a”, 3) //エラー
Intだけでなく他の型の引数をとれるようにしたい!
func repeat<T>(item:T, times:Int) -> [T] {
var result = [T]()
for i in 0...times {
result.append(item)
}
return result
}
!
repeat(10, 3) //[10,10,10]
repeat(“a”, 3) //[“a”,”a”,”a”]
func larger<T:Comparable>(one:T, two:T) -> T {
return one > two ? one : two;
}
型制約あり
タプル
var tuple = ("月野うさぎ", 14)
var name = tuple.0 //“月野うさぎ”
var age = tuple.1 //14
var tuple = (name:”月野うさぎ", age:14)
var name = tuple.name //“月野うさぎ”
var age = tuple.age //14
要素に名前をつけることもできる
おさらいはここまで!
SwiftでWatchKitいじってみた
• WatchKitでできる(できそうな)こと
• AppleWatchのアプリ一覧UIを実装した人がいるの
でそれをビルドして動かしてみた
WatchKitで作れるもの
• WatchKit Apps: AppleWatchアプリ。階層で掘り下げて
いくものと画面が切り替わるものの2種類。ただし、基本的
にはiPhoneアプリのサブ。
• Grances: スクロールや編集ができない、表示用の画面。ア
プリのお知らせ、天気やカウントダウンなどが一時的に表
示され、ユーザーがチラ見できるイメージ
• 通知画面:アプリのアイコン、通知内容、アプリ名だけを表
示するショート画面と、スクロール可能で、いいね!等の反
応を返せるロング画面の2種類。
WatchKit
• WKInterfaceController
• WKUserNotificationInterfaceController
• WKInterfaceDevice
• WKInterfaceObject
なんと全部で15クラス。
通知・デバイス情報・Controller・UIパーツ
• WKInterfaceButton
• WKInterfaceDate
• WKInterfaceGroup
• WKInterfaceImage
• WKInterfaceMap
• WKInterfaceSeparator
• WKInterfaceSlider
• WKInterfaceSwitch
• WKInterfaceTable
• WKInterfaceTimer

Mais conteúdo relacionado

Destaque

プロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswiftプロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswiftTomohiro Kumagai
 
NS Prefix 外伝 … Copy-On-Write #関モバ
NS Prefix 外伝 … Copy-On-Write #関モバNS Prefix 外伝 … Copy-On-Write #関モバ
NS Prefix 外伝 … Copy-On-Write #関モバTomohiro Kumagai
 
20131209_buildinsidermeetup
20131209_buildinsidermeetup20131209_buildinsidermeetup
20131209_buildinsidermeetupkumake
 
Hadoopの紹介
Hadoopの紹介Hadoopの紹介
Hadoopの紹介bigt23
 
いままで使ってきた携帯電話
いままで使ってきた携帯電話いままで使ってきた携帯電話
いままで使ってきた携帯電話Ippei Ogiwara
 
サービスを成長させる為の開発について
サービスを成長させる為の開発についてサービスを成長させる為の開発について
サービスを成長させる為の開発についてtatsuya mazaki
 
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作Nobutaka Takushima
 
New Objective-C Features for Swift 2.0
New Objective-C Features for Swift 2.0New Objective-C Features for Swift 2.0
New Objective-C Features for Swift 2.0Goichi Hirakawa
 
2014.11.12 ibm bluemix pdf
2014.11.12 ibm bluemix pdf2014.11.12 ibm bluemix pdf
2014.11.12 ibm bluemix pdfYuichiro Maki
 
Cocos2d-xの深層〜Cocos2d-x組み込みによるピュアAndroid/iOSアプリの外科手術的統合
Cocos2d-xの深層〜Cocos2d-x組み込みによるピュアAndroid/iOSアプリの外科手術的統合Cocos2d-xの深層〜Cocos2d-x組み込みによるピュアAndroid/iOSアプリの外科手術的統合
Cocos2d-xの深層〜Cocos2d-x組み込みによるピュアAndroid/iOSアプリの外科手術的統合Ryuichi Kubuki
 
【登壇資料】人類総インターネット時代に20代を無駄にしないために
【登壇資料】人類総インターネット時代に20代を無駄にしないために【登壇資料】人類総インターネット時代に20代を無駄にしないために
【登壇資料】人類総インターネット時代に20代を無駄にしないためにJunichi Akagawa
 
Swift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposiumSwift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposiumTomohiro Kumagai
 
Plannahプロジェクトの開発環境とdeploy gateの紹介
Plannahプロジェクトの開発環境とdeploy gateの紹介Plannahプロジェクトの開発環境とdeploy gateの紹介
Plannahプロジェクトの開発環境とdeploy gateの紹介Kenji Kinukawa
 
Objective-Cひとめぐり
Objective-CひとめぐりObjective-Cひとめぐり
Objective-CひとめぐりKenji Kinukawa
 
土下座パラダイスはこうして生まれた
土下座パラダイスはこうして生まれた土下座パラダイスはこうして生まれた
土下座パラダイスはこうして生まれたTakafumi Naito
 
革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術Toru Yamaguchi
 

Destaque (20)

プロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswiftプロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswift
 
NS Prefix 外伝 … Copy-On-Write #関モバ
NS Prefix 外伝 … Copy-On-Write #関モバNS Prefix 外伝 … Copy-On-Write #関モバ
NS Prefix 外伝 … Copy-On-Write #関モバ
 
Javaone報告会
Javaone報告会Javaone報告会
Javaone報告会
 
20131209_buildinsidermeetup
20131209_buildinsidermeetup20131209_buildinsidermeetup
20131209_buildinsidermeetup
 
Hadoopの紹介
Hadoopの紹介Hadoopの紹介
Hadoopの紹介
 
いままで使ってきた携帯電話
いままで使ってきた携帯電話いままで使ってきた携帯電話
いままで使ってきた携帯電話
 
サービスを成長させる為の開発について
サービスを成長させる為の開発についてサービスを成長させる為の開発について
サービスを成長させる為の開発について
 
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
 
New Objective-C Features for Swift 2.0
New Objective-C Features for Swift 2.0New Objective-C Features for Swift 2.0
New Objective-C Features for Swift 2.0
 
2014.11.12 ibm bluemix pdf
2014.11.12 ibm bluemix pdf2014.11.12 ibm bluemix pdf
2014.11.12 ibm bluemix pdf
 
Cocos2d-xの深層〜Cocos2d-x組み込みによるピュアAndroid/iOSアプリの外科手術的統合
Cocos2d-xの深層〜Cocos2d-x組み込みによるピュアAndroid/iOSアプリの外科手術的統合Cocos2d-xの深層〜Cocos2d-x組み込みによるピュアAndroid/iOSアプリの外科手術的統合
Cocos2d-xの深層〜Cocos2d-x組み込みによるピュアAndroid/iOSアプリの外科手術的統合
 
【登壇資料】人類総インターネット時代に20代を無駄にしないために
【登壇資料】人類総インターネット時代に20代を無駄にしないために【登壇資料】人類総インターネット時代に20代を無駄にしないために
【登壇資料】人類総インターネット時代に20代を無駄にしないために
 
Cross2013_DeNA
Cross2013_DeNACross2013_DeNA
Cross2013_DeNA
 
PHP at Yahoo! JAPAN
PHP at Yahoo! JAPANPHP at Yahoo! JAPAN
PHP at Yahoo! JAPAN
 
Swift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposiumSwift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposium
 
Plannahプロジェクトの開発環境とdeploy gateの紹介
Plannahプロジェクトの開発環境とdeploy gateの紹介Plannahプロジェクトの開発環境とdeploy gateの紹介
Plannahプロジェクトの開発環境とdeploy gateの紹介
 
Objective-Cひとめぐり
Objective-CひとめぐりObjective-Cひとめぐり
Objective-Cひとめぐり
 
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyieldPHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
 
土下座パラダイスはこうして生まれた
土下座パラダイスはこうして生まれた土下座パラダイスはこうして生まれた
土下座パラダイスはこうして生まれた
 
革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術
 

Semelhante a Swift入門おさらい

Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Tetsuya Morimoto
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!Ra Zon
 
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅Tomoki Hasegawa
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 
ソフトウェア工学2023 12 コードフォーマット
ソフトウェア工学2023 12 コードフォーマットソフトウェア工学2023 12 コードフォーマット
ソフトウェア工学2023 12 コードフォーマットToru Tamaki
 
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1耕平 谷口
 
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフトobjc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフトTaketo Sano
 
Javaセキュアコーディングセミナー東京第2回講義
Javaセキュアコーディングセミナー東京第2回講義Javaセキュアコーディングセミナー東京第2回講義
Javaセキュアコーディングセミナー東京第2回講義JPCERT Coordination Center
 
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」Takeshi Kiriya
 
プロジェクトでRubocopを使って自動コードレビューしてみた話
プロジェクトでRubocopを使って自動コードレビューしてみた話プロジェクトでRubocopを使って自動コードレビューしてみた話
プロジェクトでRubocopを使って自動コードレビューしてみた話Cake YOSHIDA
 
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプKohsuke Yuasa
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成Akineko Shimizu
 

Semelhante a Swift入門おさらい (12)

Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
 
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
ソフトウェア工学2023 12 コードフォーマット
ソフトウェア工学2023 12 コードフォーマットソフトウェア工学2023 12 コードフォーマット
ソフトウェア工学2023 12 コードフォーマット
 
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
 
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフトobjc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
 
Javaセキュアコーディングセミナー東京第2回講義
Javaセキュアコーディングセミナー東京第2回講義Javaセキュアコーディングセミナー東京第2回講義
Javaセキュアコーディングセミナー東京第2回講義
 
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
 
プロジェクトでRubocopを使って自動コードレビューしてみた話
プロジェクトでRubocopを使って自動コードレビューしてみた話プロジェクトでRubocopを使って自動コードレビューしてみた話
プロジェクトでRubocopを使って自動コードレビューしてみた話
 
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成
 

Swift入門おさらい