2017-07-06 15 views
-1

私は遊び場に次のコードを書いて、Apple doc関数&クラスから学びます。ここ
関数は引数の1つとして別の関数をとることができます

func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool { 
    for item in list { 
     if condition(item) { 
      return true 
     } 
    } 
    return false 
} 
func lessThanTen(number: Int) -> Bool { 
    return number < 10 
} 
var numbers = [20, 19, 7, 12] 
hasAnyMatches(numbers, condition: lessThanTen) 

は、どのように私は直接異なる条件を渡すことができます。..私のコードですか? は私が偽/

hasAnyMatches(numbers, condition: { $0 < 10 }) 

実際には、この関数の戻り値がtrueの...そのように書くことができますが、私は、p/oをので、このラインのプレイグラウンド代理でそのように書くとき:(4回) だから、ときに発生するもの私はそのように書いています。

私にはhasAnyMatches()funcの条件を直接渡すための解決策があります。

答えて

1

あなたの書き込み方法は問題ありませんでした。呼び出しで最初の引数ラベルが欠落しています。それは次のようになります。

hasAnyMatches(list: numbers, condition: { $0 < 10 }) 
+0

に雅をチェックするために機能する必要はありません:それは元のコードで起こるように真/偽が表示されません – NiravS

+0

それはそうではありません - それは遊び場の仕事のためだけです。コードが正しく動作する場合、それは問題ではありません。 –

+0

@SørenMortensen遊び場に真偽を出力したい場合、私の答えはあなたを助けましたか? – Sweeper

1

あなたがこれを書く:

hasAnyMatches(numbers, condition: { $0 < 10 }) 

遊び場は "(4回)" と言います。これは、閉鎖{ $0 < 10 }が各項目に対して1回、numbersで4回実行されるためです。

hasAnyMatches関数の戻り値を表示するには、いくつかの方法があります。

  • あなただけ{$0 < 10}は独自の行に加えることができます。

    hasAnyMatches(list: numbers, condition: // shows true on this line 
        {$0 < 10} // shows (4 times) on this line 
    ) 
    
  • あなたは、変数の値を取得し、その後、変数に結果を格納することができます

    let val = hasAnyMatches(list: numbers, condition: {$0 < 10}) 
    val // shows true on this line 
    
1

hasAnyMatches関数は、数値と条件クロージャのリストを取ります。したがって、クロージャを渡すことができます。 INTとリターンは同じことを書くための別の方法は、コレクションのfiltersた繰り返し処理を使用して含める条件に一致する要素のみを含む配列を返すようになり

let numbers = [20, 19, 7, 12] 
let lessThan: (Int) -> Bool = { $0 < 10 } 
let match = hasAnyMatches(list: numbers, condition: lessThan) 
print(match) 

をBOOL。フィルタを使用する主な利点は、その作り付けであり、あなたは別のhasAnyMatchesが、私はそのようにはなく遊び場0/Pで書き込み条件

let numbers = [20, 19, 7, 12] 
let match = numbers.filter ({ $0 < 10 }).count > 0 
print(match) 
関連する問題