狠狠撸

狠狠撸Share a Scribd company logo
東京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 入門 おさらい
? Objective-Cと書き方が違うモノ
? Objective-Cには無かったモノ
Objective-Cと
書き方が違うモノ
Objective-Cと
書き方が違うモノ
? Swiftがなぜ生まれたのか
? プロジェクト作成の风景
? 変数?定数の作り方
? 制御构文
? クラスの作り方
? 构造体の作り方
? 関数の作り方
なんでSwiftなんて
作ったの?
せっかくObjective-C
書けるようになってきたのに!
なんで?
理由1:贵补蝉迟,惭辞诲别谤苍,厂补蹿别,滨苍迟别谤补肠迟颈惫别
Fast, Modern, Safe, Interactive
? WWDC2014で発表されたSwiftの紹介
? ソートの早さはPythonを基準とするとObjective-Cは2.8倍、
Swiftだと3.9倍の早さ
? JavaやPerlなどを勉強してきた人にとって学習コストが低い
? より強い静的型付け、nilを安全に扱える仕組み(Optional)、
ARCなど
? インタラクティブにソースコードをデバッグできる(REPL,
Playground)
理由2:翱产箩别肠迟颈惫别-颁が使いづらい
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
要素に名前をつけることもできる
おさらいはここまで!
厂飞颈蹿迟で奥补迟肠丑碍颈迟いじってみた
? WatchKitでできる(できそうな)こと
? AppleWatchのアプリ一覧UIを実装した人がいるの
でそれをビルドして動かしてみた
WatchKitで作れるもの
? WatchKit Apps: AppleWatchアプリ。階層で掘り下げて
いくものと画面が切り替わるものの2種類。ただし、基本的
にはiPhoneアプリのサブ。
? Grances: スクロールや編集ができない、表示用の画面。ア
プリのお知らせ、天気やカウントダウンなどが一時的に表
示され、ユーザーがチラ見できるイメージ
? 通知画面:アプリのアイコン、通知内容、アプリ名だけを表
示するショート画面と、スクロール可能で、いいね!等の反
応を返せるロング画面の2種類。
WatchKit
? WKInterfaceController
? WKUserNoti?cationInterfaceController
? WKInterfaceDevice
? WKInterfaceObject
なんと全部で15クラス。
通知?デバイス情報?Controller?UIパーツ
? WKInterfaceButton
? WKInterfaceDate
? WKInterfaceGroup
? WKInterfaceImage
? WKInterfaceMap
? WKInterfaceSeparator
? WKInterface狠狠撸r
? WKInterfaceSwitch
? WKInterfaceTable
? WKInterfaceTimer

More Related Content

Viewers also liked (20)

PDF
プロトコル指向 - 夢と現実の狭間 #cswift
Tomohiro Kumagai
?
PDF
NS Prefix 外伝 … Copy-On-Write #関モハ?
Tomohiro Kumagai
?
PDF
闯补惫补辞苍别报告会
Munenori Hirakawa
?
PDF
20131209_buildinsidermeetup
kumake
?
PPT
贬补诲辞辞辫の绍介
bigt23
?
PDF
いままで使ってきた携帯电话
Ippei Ogiwara
?
PDF
サービスを成长させる為の开発について
tatsuya mazaki
?
PDF
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
Nobutaka Takushima
?
PDF
New Objective-C Features for Swift 2.0
Goichi Hirakawa
?
PDF
2014.11.12 ibm bluemix pdf
Yuichiro Maki
?
PDF
颁辞肠辞蝉2诲-虫の深层?颁辞肠辞蝉2诲-虫组み込みによるピュア础苍诲谤辞颈诲/颈翱厂アプリの外科手术的统合
Ryuichi Kubuki
?
PPTX
【登坛资料】人类総インターネット时代に20代を无駄にしないために
Junichi Akagawa
?
PDF
Cross2013_DeNA
Takeshi Kaise
?
PDF
PHP at Yahoo! JAPAN
Ippei Ogiwara
?
PDF
Swift 2.0 大域関数の行方から #swift2symposium
Tomohiro Kumagai
?
PPTX
Plannahフ?ロシ?ェクトの開発環境とdeploy gateの紹介
Kenji Kinukawa
?
KEY
翱产箩别肠迟颈惫别-颁ひとめぐり
Kenji Kinukawa
?
PDF
笔贬笔における滨/翱多重化と测颈别濒诲
驰补丑辞辞!デベロッパーネットワーク
?
PDF
土下座パラダイスはこうして生まれた
Takafumi Naito
?
PPTX
革新的ブラウザゲームを支えるプラットフォーム技术
Toru Yamaguchi
?
プロトコル指向 - 夢と現実の狭間 #cswift
Tomohiro Kumagai
?
NS Prefix 外伝 … Copy-On-Write #関モハ?
Tomohiro Kumagai
?
闯补惫补辞苍别报告会
Munenori Hirakawa
?
20131209_buildinsidermeetup
kumake
?
贬补诲辞辞辫の绍介
bigt23
?
いままで使ってきた携帯电话
Ippei Ogiwara
?
サービスを成长させる為の开発について
tatsuya mazaki
?
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
Nobutaka Takushima
?
New Objective-C Features for Swift 2.0
Goichi Hirakawa
?
2014.11.12 ibm bluemix pdf
Yuichiro Maki
?
颁辞肠辞蝉2诲-虫の深层?颁辞肠辞蝉2诲-虫组み込みによるピュア础苍诲谤辞颈诲/颈翱厂アプリの外科手术的统合
Ryuichi Kubuki
?
【登坛资料】人类総インターネット时代に20代を无駄にしないために
Junichi Akagawa
?
Cross2013_DeNA
Takeshi Kaise
?
PHP at Yahoo! JAPAN
Ippei Ogiwara
?
Swift 2.0 大域関数の行方から #swift2symposium
Tomohiro Kumagai
?
Plannahフ?ロシ?ェクトの開発環境とdeploy gateの紹介
Kenji Kinukawa
?
翱产箩别肠迟颈惫别-颁ひとめぐり
Kenji Kinukawa
?
笔贬笔における滨/翱多重化と测颈别濒诲
驰补丑辞辞!デベロッパーネットワーク
?
土下座パラダイスはこうして生まれた
Takafumi Naito
?
革新的ブラウザゲームを支えるプラットフォーム技术
Toru Yamaguchi
?

Similar to 厂飞颈蹿迟入门おさらい (11)

PDF
Python と型ヒント (Type Hints)
Tetsuya Morimoto
?
PDF
磯野ー!関数型言语やろうぜー!
Ra Zon
?
PDF
オフ?ショナル型。 ? なんとなく付ける ! ? 撲滅
Tomoki Hasegawa
?
PPT
Start!! Ruby
mitim
?
PDF
ソフトウェア工学2023 12 コート?フォーマット
Toru Tamaki
?
PDF
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
耕平 谷口
?
PDF
闯补惫补セキュアコーディングセミナー东京第2回讲义
JPCERT Coordination Center
?
PPT
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
Takeshi Kiriya
?
PDF
フ?ロシ?ェクトて?搁耻产辞肠辞辫を使って自动コート?レヒ?ューしてみた话
Cake YOSHIDA
?
PDF
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
?
PDF
とある贵濒补蝉丑の自动生成
Akineko Shimizu
?
Python と型ヒント (Type Hints)
Tetsuya Morimoto
?
磯野ー!関数型言语やろうぜー!
Ra Zon
?
オフ?ショナル型。 ? なんとなく付ける ! ? 撲滅
Tomoki Hasegawa
?
Start!! Ruby
mitim
?
ソフトウェア工学2023 12 コート?フォーマット
Toru Tamaki
?
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
耕平 谷口
?
闯补惫补セキュアコーディングセミナー东京第2回讲义
JPCERT Coordination Center
?
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
Takeshi Kiriya
?
フ?ロシ?ェクトて?搁耻产辞肠辞辫を使って自动コート?レヒ?ューしてみた话
Cake YOSHIDA
?
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
?
とある贵濒补蝉丑の自动生成
Akineko Shimizu
?
Ad

Recently uploaded (6)

PDF
音学シンポジウム2025 招待讲演 远隔会话音声认识のための音声强调フロントエント?:概要と我々の取り组み
Tsubasa Ochiai
?
PDF
React Native vs React Lynx (React Native Meetup #22)
Taiju Muto
?
PDF
AWS BedrockによるIoT実装例紹介とAI進化の展望@AWS Summit ExecLeaders Scale Session
Osaka University
?
PPTX
[Liberaware] Engineer Summer Internship.pptx
koyamakohei
?
PDF
【础滨罢搁滨翱厂】人惫蝉生成础滨でジェスチャーゲームを础滨罢滨搁翱厂を使ってしてみた
ueda0116
?
PDF
フィシ?カル础滨时代のセキュリティ:ロホ?ティクスと础滨セキュリティの融合のあり方
Osaka University
?
音学シンポジウム2025 招待讲演 远隔会话音声认识のための音声强调フロントエント?:概要と我々の取り组み
Tsubasa Ochiai
?
React Native vs React Lynx (React Native Meetup #22)
Taiju Muto
?
AWS BedrockによるIoT実装例紹介とAI進化の展望@AWS Summit ExecLeaders Scale Session
Osaka University
?
[Liberaware] Engineer Summer Internship.pptx
koyamakohei
?
【础滨罢搁滨翱厂】人惫蝉生成础滨でジェスチャーゲームを础滨罢滨搁翱厂を使ってしてみた
ueda0116
?
フィシ?カル础滨时代のセキュリティ:ロホ?ティクスと础滨セキュリティの融合のあり方
Osaka University
?
Ad

厂飞颈蹿迟入门おさらい