2016-03-21 7 views
1

クラス参照によると、captureStillImageAsynchronouslyFromConnectionの完了ハンドラはNSErrorオブジェクトを受け取りますが、オプションではありません。captureStillImageAsynchronouslyFromConnectionの関数宣言とパラメータの記述の間に競合がありますか?

関数の宣言:パラメータの説明ではまだ

func captureStillImageAsynchronouslyFromConnection(connection: AVCaptureConnection!, completionHandler handler: ((CMSampleBuffer!, NSError!) -> Void)!) 

、その要求が満たされた場合にはnilがNSErrorオブジェクトの代わりに完了ハンドラに返されることがありますと言います。

パラメータ説明:

If the request could not be completed, an NSError object that describes the problem; otherwise nil. 

記述はそれがない、宣言がNSErrorオブジェクトのためのオプションが含まれている必要があります示唆していますか?パラメータの説明と関数の宣言が矛盾していませんか?

答えて

1

あなたがアンラップしていない限り、オプションのnullを使用している限り、あなたは問題ありません。

ここにバリエーションを示すサンプルコードを示します。コールバックシグネチャは暗黙的にラップされていないオプションを使用していますが、渡されたパラメータはゼロになる可能性があることに注意してください。

import Foundation 

struct Buffer { 
} 

func foo(callback: (buffer: Buffer!, error: NSError!) -> Void) { 
    print("#1: buffer and error are nil") 
    callback(buffer: nil, error: nil) 
    print("#2: buffer not nil, error is nil") 
    callback(buffer: Buffer(), error: nil) 
    print("#3: buffer is nil, error is not nil") 
    callback(buffer: nil, error: NSError(domain: "domain", code: 123, userInfo: nil)) 
    print("#4: both buffer and error are not nil") 
    callback(buffer: Buffer(), error: NSError(domain: "domain", code: 123, userInfo: nil)) 
} 

func cb(buffer: Buffer!, error: NSError!) { 
    if let buffer = buffer { 
     print(buffer) 
    } 
    else { 
     print("buffer is nil") 
    } 

    if let error = error { 
     print(error) 
    } 
    else { 
     print("error is nil") 
    } 
} 

foo(cb) 

この例からわかるように、暗黙のアンラップされたオプションはnilにすることができます。それはNSErrorの記述の内容です。

+0

通常のオプションではなく、宣言で暗黙のアンラップオプションを使用する理由は、あなたが強制的に使用する必要がないということです!関数全体を通して?ありがとう! – Crashalot

+0

それは大きな理由ですが、期限を過ぎないように注意してください。安全なケースがいくつかありますが、安全性が勝ちます。このリンクの@drewagのポストをチェックしてください:http://stackoverflow.com/questions/24006975/why-create-implicitly-unwrapped-optionals安全に遊んでいる間にそれを使用するための多くの方法についてより詳しく調べてください。 – Laurent

+0

ええ、理解される。通常のオプションとは対照的に、リンゴが暗黙的にアンラップされたオプションを使用していた理由を理解しようとしています。その理由は何ですか? – Crashalot

関連する問題