列挙
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コードの行を保持します。クロージャーは、それらが作成された環境もキャプチャします。つまり、クロージャーは、クロージャー内で使用されている値のコピーを取ります。