列挙
Enumerations
列挙型(通常は単に「enum」と発音され、「ee-num」と発音されます)
enum WeatherType { case sun case cloud case rain case wind(speed: Int) case snow } func getHaterStatus(weather: WeatherType) -> String? { switch weather { case .sun: return nil case .wind(let speed) where speed < 10: return "meh" case .cloud, .wind: return "dislike" case .rain, .snow: return "hate" } } getHaterStatus(weather: WeatherType.wind(speed: 5))
ポリモーフィズムと型キャスト
Polymorphism and typecasting
class Album { var name: String init(name: String) { self.name = name } func getPerformance() -> String { return "The album \(name) sold lots" } } class StudioAlbum: Album { var studio: String init(name: String, studio: String) { self.studio = studio super.init(name: name) } override func getPerformance() -> String { return "The studio album \(name) sold lots" } } class LiveAlbum: Album { var location: String init(name: String, location: String) { self.location = location super.init(name: name) } override func getPerformance() -> String { return "The live album \(name) sold lots" } } var taylorSwift = StudioAlbum(name: "Taylor Swift", studio: "The Castles Studios") var fearless = StudioAlbum(name: "Speak Now", studio: "Aimeeland Studio") var iTunesLive = LiveAlbum(name: "iTunes Live from SoHo", location: "New York") var allAlbums: [Album] = [taylorSwift, fearless, iTunesLive] for album in allAlbums { print(album.getPerformance()) }
Closures
クロージャーは、コードを保持する変数と考えることができます。したがって、整数が0または500を保持する場合、クロージャーはSwiftコードの行を保持します。クロージャーは、それらが作成された環境もキャプチャします。つまり、クロージャーは、クロージャー内で使用されている値のコピーを取ります。