ジェネリクス 型指定の引数

/*
ジェネリクス
型指定の引数
*/
func swapTwoInts(a: inout Int, b: inout Int) {
    let c = a
    a = b
    b = c
}
var p = 1
var q = 2
swapTwoInts(a: &p, b: &q)
print("p = \(p), q = \(q)")
 
func swapTwoValues<T>(a: inout T, b: inout T) {
    let c = a
    a = b
    b = c
}
var r = 1.0
var s = 2.0
swapTwoValues(a: &p, b: &q)
print("p = \(p), q = \(q)")
swapTwoValues(a: &r, b: &s)
print("r = \(r), s = \(s)")
 
// 外部引数名省略
func swapTwoVal<T>(_ a: inout T, _ b: inout T) {
    let c = a
    a = b
    b = c
}
swapTwoVal(&p, &q)
print("p = \(p), q = \(q)")
swapTwoVal(&r, &s)
print("r = \(r), s = \(s)")

オーバーライド

/* オーバーライド */
class Car: Vehicle {
    var speed: Double = 0.0
    override init() {
        super.init()
        maxPassengers = 5
        numberOfWheels = 4
    }
    override func description() -> String {
        return super.description() + "; "
            + "traveling at \(speed) mph"
    }
}
 
var car = Car()
print(car.description())
car.speed = 30.0
print(car.description())

継承

/* 継承 */
class Vehicle {
    var numberOfWheels: Int?
    var maxPassengers: Int?
    init() {
    }
    func description() -> String {
//      return "numberOfWheels = \(numberOfWheels), maxPassengers = \(maxPassengers)" // warning: string interpolation produces a debug description for an optional value; did you mean to make this explicit?
        return "numberOfWheels = \(numberOfWheels ?? 0), maxPassengers = \(maxPassengers ?? 0)"
    }
}
 
class Bicycle: Vehicle {
    // init() { // error: overriding declaration requires an 'override' keyword
    override init() { // error: overriding declaration requires an 'override' keyword
        super.init()
        numberOfWheels = 2
    }
}

構造内部の辞書型や列挙型のアクセス方法としてサブスクリプトを定義

/*
  サブスクリプト
  構造内部の辞書型や列挙型のアクセス方法としてサブスクリプトを定義
*/
struct TimesTable {
    let multiplier: Int
    subscript(index: Int) -> Int {
        return multiplier * index
    }
}
let threeTimesTable = TimesTable(multiplier: 3)
print("six times three is \(threeTimesTable[6])")

コレクション型 配列、辞書など

/*
  コレクション型
  配列、辞書など
*/
// var shoppingList: String[] = ["Eggs", "Milk"] // error: array types are now written with the brackets around the element type
var shoppingList: [String] = ["Eggs", "Milk"]
var airports: Dictionary<String, String> = ["TYO": "Tokyo", "DUB": "Dublin"]