8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Swiftはじめたい...その10 特殊変数とか参照渡しとか、ジェネリクスとか...

Last updated at Posted at 2016-01-20

今回はノンジャンルで試してみます。

literal Expression

  • 行数とかがわかります。
literalExpression
import Foundation

func literalExpression() {
    print("__FILE__",__FILE__)
    print("__LINE__",__LINE__)
    print("__COLUMN__",__COLUMN__)
    print("__FUNCTION__",__FUNCTION__)
}
literalExpression()
結果
__FILE__ <EXPR>
__LINE__ 5
__COLUMN__ 24
__FUNCTION__ literalExpression()
  • __FILE__は、praygroundで実行してるからでしょうか?

参照渡し

  • 個人的にはどこがどう変わったかわかりづらいので、いざというとき以外はあんまり使わないですけどね。
参照渡し
func callByReference(inout a: Int) {
    a += 10
}

var a = 1
print("before:",a)
callByReference(&a)
print("after:",a)
  • inoutというのが参照渡しですよっていうことらしいです。
結果
before: 1
after: 11
  • 参照渡しですよって明示するほうがfinalとかより良いと思います。

ジェネリクス

総称型ってやつですね。

GenericFunction
func swapVal<T>(inout a: T, inout _ b: T) {
    let temp = a
    a = b
    b = temp
}

if true {
    var a = 123;
    var b = 789;
    swapVal(&a, &b);
    print(a,b)
}

if true {
    var a = "abc";
    var b = "xyz";
    swapVal(&a, &b);
    print(a,b)
}

結果
789 123
xyz abc
  • まぁふつーですかね。

値の比較が可能 Comparable

  • ジェネリクスの型の絞込ってことなんですかね?
  • Tが比較可能なものという縛りをかけられます。
値の比較が可能
func genericCompare<T:Comparable> (a:T,_ b:T)->T {
    let c:T = a > b ? a : b
    return c
}
print(genericCompare(10,10))
print(genericCompare(1,2))
print(genericCompare(1.0,-2.0))
print(genericCompare("abc","bcd"))
結果
10
2
1.0
bcd

値の==が可能 Equatable

  • Tが==のチェック可能なものという縛りをかけられます。
値の==が可能
func genaricSame<T:Equatable> (a:T,_ b:T)->T {
    let c = (a == b) ? a : b
    return c
}

print(genaricSame(10,10))
print(genaricSame(1,2))
print(genaricSame(1.0,-2.0))
print(genaricSame("abc","bcd"))
結果
10
2
-2.0
bcd
  • Comparable,Equatableの他にはなにかあるんでしょうか??

まとめ

  • ジェネリクスは宿題が多くありそうです。
  • ジェネリクスにwhereとかもあるようで
  • Comparable,Equatableのような〜ableな指定があるかどうかも調べなきゃ...

今日はここまで

  • 次はジェネリクスをもうちょっと調べるつもりです。
8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?