クロージャ
まずは引数にクロージャを渡すやり方から。
Stringを引数にとり、Boolを返すクロージャを受け付ける関数は以下の通り。
func doClosure(closure:((arg:String) -> Bool)) { val result:Bool = closure("this is argument.") }
リスト処理
次に、mapとfilter。
例えば属性nameを持つクラスPersonのリストArray<Person>
から、nameの値のみのリストArray<String>
を抽出するにはmapを利用します。
let personList:Array<Person> = getPersonList() let nameList:Array<String> = personList.map({ (person:Person) -> String in return person.name })
さらに、名前がTanakaから始まる人を抽出するには、filterを用いて以下の通り。
let tanakaNameList:Array<String> = nameList.filter({ (name:String) -> Bool in return startsWith(name, "Tanaka") })
組み合わせると、こんな感じ。
let personList:Array<Person> = getPersonList() let tanakaNameList:Array<String> = personList.map({ (person:Person) -> String in return person.name }).filter({ (name:String) -> Bool in return startsWith(name, "Tanaka") })