~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", "#日テレ", "#フジ"]