2017-03-22 12 views
1

末尾I持ってスウィフト:非関数型の値を呼び出すことはできません - 閉鎖

if let a = assetConfigs.first { $0.code == cells[2] } 
{...} 

assetConfigsと呼ばれる性質を持っているAssetConfig型のオブジェクトの配列があるコードの行の次code

エラーが発生する

Cannot call value of non-function type AssetConfig? 

セル[2]に含まれている値と同じコードを持つ最初のアセット設定が必要です。 Swiftの配列には、特定の条件を満たす最初のオブジェクトを返すfirstという関数があります。 (https://developer.apple.com/reference/swift/array/1848165-first

私は間違っていますか?

+1

let a = assetConfigs.first(where:{$ 0.code == cells [2]}) 'のように中括弧を曖昧にすると同じ問題が発生しますか? –

+1

末尾の閉包をあいまいにするために、かっこを使用する必要があります。たとえば、http://stackoverflow.com/q/34930596/2976878を参照してください。 – Hamish

+0

OKです。コンパイラは、 if文ブロックを開始するか、関数firstを後続のクロージャで呼び出します。わかった。ありがとう! – Vazzyb

答えて

0

ここには、基本的な構文エラーを隠すことができる微妙な問題があります。曖昧さのない呼び出しであっても、クロージャーの本体にエラーがあると、コンパイラーは非関数型の値を呼び出すことができないと報告します。クロージャ内のエラーを修正することにより、それがコンパイルされます:

を非関数型

let a = assetConfigs.first(where: { $0.code == "TEST" /* incompatible types */ }) { 
    ... 
} 

の値を呼び出すことはできませんコンパイル:

let a = assetConfigs.first(where: { $0.code == cells[2] }) { 
    ... 
} 

私はこの結果を思わ配列メンバー関数firstの2つの定義があり、コンパイラはを最初に選択します probleオプションの配列要素を返すメンバ関数firstは関数ではないことを識別します。

関連する問題