思い立ったが吉日!

iOSが好きです。

Swiftの参照渡しでinoutを使う

Swiftの参照渡しでinoutを使う

Swift書いていたらinoutなるものが出てきて、なんだろうと調べたら参照渡しのようですね。

参照渡し obj-c
-(void)say : (NSString **)str { 
    *str = @"hey!";
}
NSString *saying = @"hello";
NSLog(@"%@",saying); // hello
[self say:&saying]; 
NSLog(@"%@",saying); // 元の変数もhey!になってる
// 値渡し
func test (var str: String) -> String {
    str = "hey"
    return str
}
// 参照渡し
func inoutTest (inout str:String) {
    str = "hey!"
}
var saying = "hello"

print(saying) // hello
// 値渡し
test(saying) // hey!
// 元の変数は書き変わらない
print(saying) // hello
// 参照渡し
inoutTest(&saying) // hey!
// 元の変数も書き換わる
print(saying) hey!