2017-06-19 15 views
0

、次のように更新されタイプ '((String、String、String、Int) - >())に'(_) - >私はこのように定義された閉鎖を持って

public var onLogCompletion:((_ printLog:String,_ fileName:String,_ functionName:String,_ lineNumber:Int) ->())? = nil 

fileprivate func printerCompletion(printLog:String, fileName:String, functionName: String, lineNumber:Int) -> Void { 
    if onLogCompletion != nil { 
     onLogCompletion!(printLog, getFileName(name: fileName), functionName, lineNumber) 
    } 
} 

そして、このようにそれを使用して、

Printer.log.onLogCompletion = { (log) in 
     //print(log) 
     //print(log.0) 
    } 

エラー:

Cannot assign value of type '(_) ->()' to type '((String, String, String, Int) ->())?'

しかし、これは私に間違いを与え、何をすべきかわからないのですか?

同じことがSwift 3.xでもうまくいきます。

+0

誰かに行く今、あなたはすべてのセット、私は私の質問をd​​ownvoteする理由を教えてください?以前に尋ねられたものとはまったく異なっています。 – Hemang

答えて

1

スウィフト4で動作しない理由は、Distinguish between single-tuple and multiple-argument function types(SE-0110)です。

スイフト3でやっている方法で作業したい場合は、関数タイプの引数リストをDouble parenthesesで囲むように設定する必要があります。

public var onLogCompletion:(((String,String,String,Int)) ->())? = nil 

Printer.log.onLogCompletion = { (log) in 
    //print(log) 
    //print(log.0) 
} 
+1

恐ろしい! Good Find Nirav D. – Hemang

+0

@Hemangようこそメイト:)それはあなたのためにうれしい:) –

関連する問題