Suche senden
Hochladen
まだSwiftで消耗してるの?
•
5 gefällt mir
•
4,075 views
今城 善矩
Folgen
第12回potatotipsで発表した資料です。 http://connpass.com/event/10283/ 資料はSwift1.2の仕様であり、現在とは違っています。
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 40
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Swift の3大プロトコルを眺めてみる #love_swift
Swift の3大プロトコルを眺めてみる #love_swift
Tomohiro Kumagai
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
monglee
Cookpad Summer Intern 2015 - Programming Paradigm
Cookpad Summer Intern 2015 - Programming Paradigm
Minero Aoki
第2回勉強会 オブジェクト指向
第2回勉強会 オブジェクト指向
hakoika-itwg
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
Strings and Characters in Swift
Strings and Characters in Swift
Goichi Hirakawa
Go1.18 Genericsを試す
Go1.18 Genericsを試す
asuka y
Empfohlen
Swift の3大プロトコルを眺めてみる #love_swift
Swift の3大プロトコルを眺めてみる #love_swift
Tomohiro Kumagai
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
monglee
Cookpad Summer Intern 2015 - Programming Paradigm
Cookpad Summer Intern 2015 - Programming Paradigm
Minero Aoki
第2回勉強会 オブジェクト指向
第2回勉強会 オブジェクト指向
hakoika-itwg
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
Strings and Characters in Swift
Strings and Characters in Swift
Goichi Hirakawa
Go1.18 Genericsを試す
Go1.18 Genericsを試す
asuka y
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Shintarou Okada
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
Yahoo!デベロッパーネットワーク
Tokyo r30 beginner
Tokyo r30 beginner
Takashi Minoda
Tokyo r38
Tokyo r38
Takashi Minoda
IDEALIZE YOU
IDEALIZE YOU
佑介 九岡
Start!! Ruby
Start!! Ruby
mitim
PHPフレームワーク入門
PHPフレームワーク入門
Sho A
Swift2.x を Scala からみる
Swift2.x を Scala からみる
Yuichi Adachi
キレイなコードの書き方
キレイなコードの書き方
Takuya Kitamura
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
伸男 伊藤
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
David Buck
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
Nishida Kansuke
CodeIgniter入門
CodeIgniter入門
Sho A
C++の復習
C++の復習
Toshihiko Ando
HealthKitで日別のデータを一度に取得する
HealthKitで日別のデータを一度に取得する
今城 善矩
Stargazer Meetup1
Stargazer Meetup1
今城 善矩
とにかく明るいCore Spotlight
とにかく明るいCore Spotlight
今城 善矩
SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件
今城 善矩
BaseViewControllerは作りたくない
BaseViewControllerは作りたくない
今城 善矩
小学生でも分かった気になるiOS8のSize Class
小学生でも分かった気になるiOS8のSize Class
今城 善矩
iOSアプリ開発の現場で訊いてきたtips
iOSアプリ開発の現場で訊いてきたtips
今城 善矩
Swiftだめ自慢Beta5
Swiftだめ自慢Beta5
今城 善矩
Weitere ähnliche Inhalte
Ähnlich wie まだSwiftで消耗してるの?
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Shintarou Okada
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
Yahoo!デベロッパーネットワーク
Tokyo r30 beginner
Tokyo r30 beginner
Takashi Minoda
Tokyo r38
Tokyo r38
Takashi Minoda
IDEALIZE YOU
IDEALIZE YOU
佑介 九岡
Start!! Ruby
Start!! Ruby
mitim
PHPフレームワーク入門
PHPフレームワーク入門
Sho A
Swift2.x を Scala からみる
Swift2.x を Scala からみる
Yuichi Adachi
キレイなコードの書き方
キレイなコードの書き方
Takuya Kitamura
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
伸男 伊藤
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
David Buck
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
Nishida Kansuke
CodeIgniter入門
CodeIgniter入門
Sho A
C++の復習
C++の復習
Toshihiko Ando
Ähnlich wie まだSwiftで消耗してるの?
(14)
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
Tokyo r30 beginner
Tokyo r30 beginner
Tokyo r38
Tokyo r38
IDEALIZE YOU
IDEALIZE YOU
Start!! Ruby
Start!! Ruby
PHPフレームワーク入門
PHPフレームワーク入門
Swift2.x を Scala からみる
Swift2.x を Scala からみる
キレイなコードの書き方
キレイなコードの書き方
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
CodeIgniter入門
CodeIgniter入門
C++の復習
C++の復習
Mehr von 今城 善矩
HealthKitで日別のデータを一度に取得する
HealthKitで日別のデータを一度に取得する
今城 善矩
Stargazer Meetup1
Stargazer Meetup1
今城 善矩
とにかく明るいCore Spotlight
とにかく明るいCore Spotlight
今城 善矩
SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件
今城 善矩
BaseViewControllerは作りたくない
BaseViewControllerは作りたくない
今城 善矩
小学生でも分かった気になるiOS8のSize Class
小学生でも分かった気になるiOS8のSize Class
今城 善矩
iOSアプリ開発の現場で訊いてきたtips
iOSアプリ開発の現場で訊いてきたtips
今城 善矩
Swiftだめ自慢Beta5
Swiftだめ自慢Beta5
今城 善矩
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
今城 善矩
やはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っている
今城 善矩
OHHTTPStubsを使ったiOSアプリ開発
OHHTTPStubsを使ったiOSアプリ開発
今城 善矩
ジョブズも成仏するTips考えたったwww
ジョブズも成仏するTips考えたったwww
今城 善矩
やはりお前らのiOS7対応は間違っている
やはりお前らのiOS7対応は間違っている
今城 善矩
Mehr von 今城 善矩
(13)
HealthKitで日別のデータを一度に取得する
HealthKitで日別のデータを一度に取得する
Stargazer Meetup1
Stargazer Meetup1
とにかく明るいCore Spotlight
とにかく明るいCore Spotlight
SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件
BaseViewControllerは作りたくない
BaseViewControllerは作りたくない
小学生でも分かった気になるiOS8のSize Class
小学生でも分かった気になるiOS8のSize Class
iOSアプリ開発の現場で訊いてきたtips
iOSアプリ開発の現場で訊いてきたtips
Swiftだめ自慢Beta5
Swiftだめ自慢Beta5
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
やはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っている
OHHTTPStubsを使ったiOSアプリ開発
OHHTTPStubsを使ったiOSアプリ開発
ジョブズも成仏するTips考えたったwww
ジョブズも成仏するTips考えたったwww
やはりお前らのiOS7対応は間違っている
やはりお前らのiOS7対応は間違っている
Kürzlich hochgeladen
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
Atomu Hidaka
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
osamut
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
Shota Ito
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
furutsuka
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
Kürzlich hochgeladen
(9)
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
まだSwiftで消耗してるの?
1.
Swiftのメソッドに関す る引数の仕様について 株式会社キュリオシティソフトウェア 今城善矩(@yimajo) potatotips #12 Xcode6.1
2.
まず最初に
3.
好きですSwift *こう書いておくとSwiftをdisってると思われるはずがない
4.
Swiftのメソッドには キーワード引数のようなもの がある *引数の順序は必要なため、厳密には キーワード引数 とは呼べないが便宜上
5.
しかし引数のルールは 複雑
6.
かっこいいメソッド名 を定義したい *ここでのかっこ良さとは、役割を明確にし理路整然とした定義をしたいということです
7.
Swiftのコードは Objective-Cで呼び出すことがで きるので比較分類しつつ整理する
8.
用語 class Hoge { func
instanceMethod(string str: String) { } } 外部引数名 内部引数名 • 外部引数(External Parameter) • 内部引数(Local Parameter)
9.
アジェンダ • 外部引数名を指定しない例 • 外部引数名を指定する例 •
外部引数名と内部引数名を同じにする例。記号 # • 外部引数名を省略したい場合の例。記号 _ • おまけ • イニシャライザ • 関数の場合
10.
外部引数名を指定しない 例
11.
class Hoge { //
外部引数名を指定していない func instanceMethod1(str1: String, str2: String)->String { } } let word = hoge.instanceMethod1(“hello”, str2:“world”) String *word = [hoge instanceMethod1:@“hello” str2:@“world”]; Swiftでこのメソッドを呼び出す場合 Objective-Cでこのメソッドを呼び出す場合 第2引数以降の内部引数名が外部引数名に
12.
なぜこんなルールがあるか考察
13.
• Objective-Cでもインスタンスメソッドでは外部 引数名を指定しないことはほとんどない • なるべく文として読ませるようにしている •
ただSwiftでは第1引数のみの場合など特に外部 引数名を加えるのは不自然な場合が多い • 折衷案として第2引数以降は何も指定しなけれ ば外部引数名とした方が良いと思えなくもない
14.
外部引数名を指定する 例
15.
class Hoge { //
外部引数名”string”と”andString”を指定する func instanceMethod2(string str1: String, andString str2: String) -> String { } } let word = hoge.instanceMethod2(string:“hello”, andString:“world”) String *word = [hoge instanceMethod2WithString:@“hello” andString:@“world”]; Swiftでこのメソッドを呼び出す場合 Objective-Cでこのメソッドを呼び出す場合 外部引数名を指定されている 自動でWith+外部引数名の頭文字が大文字に!
16.
なぜこんなルールがあるか考察
17.
• Objective-Cでは第1外部引数名がWith+大文字 で始まる場合が多い • Swiftで書いたコードもObjective-Cから自然 に使える
18.
外部引数名にbyやforとか前置詞を明示したら WithByHogeとかになるのか実験してみた件
19.
class Hoge { //
明示的にby付けたらWithByって自動で付加されるか実験 func instanceMethod(byString str1: String, andString str2: String) -> String {} // 同じく明示的にfor func instanceMethod(forString str1: String, andString str2: String) -> String {} } String *word = [hoge instanceMethodByString:@“hello” andString:@“world”]; なんと、Objective-Cで外部引数名に前置詞を指定すると Withなくなって定義される!! String *word = [hoge instanceMethodForString:@“hello” andString:@“world”]; Objective-Cでこのメソッドを呼び出す場合
20.
Withがなくなる前置詞を調査 • Withがなくなった前置詞 • for,
by, in, on, of, to, at, from, below • Withがなくならなかった前置詞 • over, under, about, round, around
21.
ここらへんのObjective-Cとのブリッジは Swiftのバージョンアップによってブレそうな気 がする…
22.
好きですSwift *こう書いておくとSwiftをdisってると思われるはずがない
23.
外部引数名と内部引数名同じ にする場合は#を付ける 例
24.
class Hoge { //
外部引数名と内部引数名を同じにする場合は引数名に#を付ける func instanceMethod3(#str1: String, str2: String) -> String { } } let word = hoge.instanceMethod3(str1:“hello”, str2:“world”) String *word = [hoge instanceMethodWithStr1:@“hello” str2:@“world”]; Swiftでこのメソッドを呼び出す場合 Objective-Cでこのメソッドを呼び出す場合 str1 str1: Stringという形にはしない str1が外部引数名となっている
25.
感想
26.
インスタンスメソッドの第1外部引数に # を付 けるのは、Objective-Cで前置詞Withを使うな ら自然な感じになる
27.
外部引数名を省略したい場合 _ を付ける 例
28.
class Hoge { //
第一でない外部引数名が自動なのをやめる場合は_を付ける func instanceMethod4(str1: String, _ str2: String) -> String { } } let word = hoge.instanceMethod4(“hello”, “world”) String *word = [hoge instanceMethod4:@“hello” :@“world”]; Swiftでこのメソッドを呼び出す場合 Objective-Cでこのメソッドを呼び出す場合 Objective-Cでは珍しい形になった
29.
Swiftでは省略するときに _ がよく使われる 省略して、外部引数名が
無い から 下にバーが有るだけの存在感の薄い記号 _ だと思うと 覚えられる
30.
イニシャライザの場合
31.
class Age { //
イニシャライザ init (str: String) { } // 1. 外部引数名は指定しない init (_ str: String) { } // 2. イニシャライザの引数名に_ } let age1 = Age(str: “18”) // 1. 内部引数名が外部引数名に! let age2 = Age(“18”) // 2. 省略されてシンプル Hoge *hoge1 = [Age alloc] initWithStr:@“18”]; // 1. With+Str Hoge *hoge2 = [Age alloc] init:@“18”]; // 2. 省略された Swiftでこのイニシャライザを呼び出す場合 Objective-Cでこのメソッドを呼び出す場合 省略はObjective-Cでは少し違和感のある珍しい形に イニシャライザの場合は第1引数でも内部引数名が外部引数名になる
32.
なぜこんなルールがあるか考察
33.
Objective-Cのイニシャライザでは 外部引数名を省略しないユースケースは多い
34.
この部分に関しては特に SwiftはObjective-Cに引っ張られている
35.
関数の場合
36.
メソッドとイニシャライザで ルールが微妙に違うように 関数もまた微妙に違っている
37.
関数の場合はシンプル 引数が第1であろうがなかろうが 外部引数名を指定しない場合に 内部引数名は外部引数名にならない
38.
まとめ
39.
メソッド イニシャライザ 関数 第1の外部引数名を 明示しない 外部引数名なし 内部引数名が外部引数 名になり場合により前 置詞が付く 外部引数名なし 第2以降の外部引数名を 明示しない 内部引数名が外部引数 名になる 内部引数名が外部引数 名になる 外部引数名なし 第1の外部引数名を 明示する 内部引数名が外部引数 名になり場合により前 置詞が付く 内部引数名が外部引数 名になり場合により前 置詞が付く 明示される 第2以降の外部引数名を 明示する 明示される
明示される 明示される
40.
まだSwiftで 消耗してるの? 以上です 残り時間で何か質問ありますか?
Jetzt herunterladen