はてな教科書の「プログラミング言語 Swift」を読んでます 7
https://github.com/hatena/Hatena-Textbook/blob/master/swift-programming-language.md
のんびり読んでいきます。一旦ラストォ!
Generics
特定の型ではなくて、同じ種類ならどの型に対しても対応したい、みたいな場合に使います。
Javaだとだいたい一文字で表されていることが多いのですが、Swiftの場合、一文字ではない...のでしょうか。
配列など集合を扱うクラスなどで使うことが多そうです。
と思ったら、後ろの方の関数の例に func someFunction<T>()
とあって安心です...。
102> class Printer<Content> { 103. var content : Content 104. init(content: Content) { 105. self.content = content 106. } 107. func printContent() { 108. print(content) 109. } 110. } 111> Printer<String>(content:"Print").printContent() Print 112> Printer<Int>(content: 1234).printContent() 1234
Associated types and type constraints
protocolにはassociatedtype ItemType
のように関連する型を定義する機能があります。
protocolに準拠する側では、typealias ItemType = Item
のように書いてその型を指定できます。
こうすることでprotocolを引数に取る関数などにおいてもその型を抽象化できます。
また、<Type: SomeProtocol>
のようにすることで特定のprotocolに準拠していたり、特定の型を継承している型であることを指定でき、さらにwhere節でその型について制約をかけることも可能です。
Access control
public
は完全に公開され、どこからでもアクセス可能internal
はモジュール内部からだけアクセスprivate
はそのファイル内からだけアクセス- デフォルトは
internal
- テスト用に
internal
のメソッドなどにアクセスが必要な場合は@testable import SomeModule
と書いて、テスト時のビルド設定をEnable Testability
を有効にします
protectedはないのですか...!
Availability
実行されるプラットフォームやバージョンによって利用できない関数などを表すために @available 属性が利用できます。
とりあえずここまでで一旦おしまいで次からViewをいじいじします。