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をいじいじします。