Swift/generics
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[Swift]]
*Swift/ジェネリクス [#rafbaa30]
ジェネリクス(generics)とは、型をパラメータとしてプログラ...
//関数 swap は、任意の型 T について、T型のinout引数を2つ...
func swap<T>(inout a: T, inout _ b: T) { // Tは型パラメ...
let t = a; a = b; b = t;
}
var a:Int = 2, b:Int = 5
swap(&a,&b) // a=2, b=5となる。
var s:String ="Alice", t:String = "Bob"
swap(&s,&t) // s = "Bob", t = "Alice" となる。
var v = ((2, 3), 9, (88, 108))
swap(&v.0, &v.2); // v = ((88, 108), 9, (2, 3)) となる。
func +<Key,Value>(lhs:[Key:Value],rhs:[Key:Value]) -> [K...
var dic = lhs
for (k,v) in rhs { dic[k] = v }
return dic
}
let p = ["レベル":60, "特技":10]
let q = ["番号":1]
let t = p + q; // t = [["番号":1, "レベル":60, "特技":...
**型パラメータの書き方 [#e9f1cbe5]
<T>
<T,U>
<T: OtherType>
<... where 条件>
条件は "," で区切って並べることで AND 条件となる。
T: OtherType --- 型Tは型OtherTypeと同じか、Oそのサ...
T == U --- 型Tは型Uと同じか?
**型パラメータの推論 [#b68583cb]
ジェネリック関数を使用するとき、型パラメータを明示的に記...
引数や返り値から推測される。
func f<T>(n:Int) -> [T?] { return [T?](count:n, repeated...
let a = f(3) // エラー。型を推測できないの...
let b:[Int?] = f(3) // [nil, nil, nil]
let c = f(2) + ["abc"] // [nil, nil, "abc"]
***関数の引数とタプル [#ua7d4a04]
func apply<T,U>(f:(T)->U, _ t:T) {
return f(t)
}
func spell() { print("void") }
func spell(a:Int) { print(a) }
func spell(a:Int, b:String) { print("\(a) \(b)") }
func spell(a:Int, b:String, c:Int) { print("\(a) \(b) \(...
apply(spell,()) // void と表示される
apply(spell,1) // 1 と表示される
apply(spell,(2,"abc")) // 2 abc と表示される
apply(spell,(3,"abc",4)) // 3 abc 4 と表示される
終了行:
[[Swift]]
*Swift/ジェネリクス [#rafbaa30]
ジェネリクス(generics)とは、型をパラメータとしてプログラ...
//関数 swap は、任意の型 T について、T型のinout引数を2つ...
func swap<T>(inout a: T, inout _ b: T) { // Tは型パラメ...
let t = a; a = b; b = t;
}
var a:Int = 2, b:Int = 5
swap(&a,&b) // a=2, b=5となる。
var s:String ="Alice", t:String = "Bob"
swap(&s,&t) // s = "Bob", t = "Alice" となる。
var v = ((2, 3), 9, (88, 108))
swap(&v.0, &v.2); // v = ((88, 108), 9, (2, 3)) となる。
func +<Key,Value>(lhs:[Key:Value],rhs:[Key:Value]) -> [K...
var dic = lhs
for (k,v) in rhs { dic[k] = v }
return dic
}
let p = ["レベル":60, "特技":10]
let q = ["番号":1]
let t = p + q; // t = [["番号":1, "レベル":60, "特技":...
**型パラメータの書き方 [#e9f1cbe5]
<T>
<T,U>
<T: OtherType>
<... where 条件>
条件は "," で区切って並べることで AND 条件となる。
T: OtherType --- 型Tは型OtherTypeと同じか、Oそのサ...
T == U --- 型Tは型Uと同じか?
**型パラメータの推論 [#b68583cb]
ジェネリック関数を使用するとき、型パラメータを明示的に記...
引数や返り値から推測される。
func f<T>(n:Int) -> [T?] { return [T?](count:n, repeated...
let a = f(3) // エラー。型を推測できないの...
let b:[Int?] = f(3) // [nil, nil, nil]
let c = f(2) + ["abc"] // [nil, nil, "abc"]
***関数の引数とタプル [#ua7d4a04]
func apply<T,U>(f:(T)->U, _ t:T) {
return f(t)
}
func spell() { print("void") }
func spell(a:Int) { print(a) }
func spell(a:Int, b:String) { print("\(a) \(b)") }
func spell(a:Int, b:String, c:Int) { print("\(a) \(b) \(...
apply(spell,()) // void と表示される
apply(spell,1) // 1 と表示される
apply(spell,(2,"abc")) // 2 abc と表示される
apply(spell,(3,"abc",4)) // 3 abc 4 と表示される
ページ名: