woshidan's blog

あいとゆうきとITと、とっておきの話。

はてな教科書の「プログラミング言語 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をいじいじします。