~Swiftだと簡単!?~
みなさん知っての通りすでに標準で使われている
画面遷移完了時
[self presentViewController:viewController animated:YES completion:^{
}];
他の例がみつからない...ので、とりあえず...
aとbの値見て、aの方が大きかったらYESを返すだけ...
- (void)viewDidLoad {
[self closure:^BOOL(int a, int b){
return a > b;
}];
}
-(void)closure:(BOOL(^)(int, int))close {
NSLog(@"%@", (close(4,2) == 1 ? @"YES" : @"NO");
}
// -> YES
なんで、メソッドの定義と呼び出し側で順番違うのw
override func viewDidLoad() {
closure({ (a: Int, b: Int) -> Bool in
return a > b
})
}
func closure(close:(Int, Int)->Bool) {
print("\(close(4, 2))")
}
print()って簡単だなぁ....あ、ちがう‼︎
メソッドの定義と呼び出し側の順番一緒じゃん
Swiftならもうちょいいけそう‼︎
Trailing Closuresってのでカッコの外にだして...
closure() { (a: Int, b: Int) -> Bool in
return a > b
}
型推論で引数の型もいらないし、
返り値の型もreturnもいらないでしょ...
closure() { (a, b) in
a > b
}
ショートハンド引数名で、
引数って($0, $1..)に省略できるんだ...
closure({
$0 > $1
})
ん!?
オペレータ関数で、
$0とか$1って勝手に判断してくれるらしいぞ...
closure(>)
Swift兄さん、やりすぎですよ....
<と>がここまで省略できるらしいけど...
ってことは‼︎
map, filterとかは...
と、思ったけど
さすがにそこまで省略できなかった...
let channels = [ "nhk", "日テレ", "フジ" ]
channels.map { "#" + $0 }
// -> ["#nhk", "#日テレ", "#フジ"]