私はSwift langを学習していますが、オプションのコールバック引数を関数に渡すことはできません:
_func dismiss(completion: () -> Void) {
if (completion) {
return self.dismissViewControllerAnimated(true, completion: completion)
}
self.dismissModalViewControllerAnimated(true)
}
_
エラーが表示されます-Type () -> Void does not conform to protocol 'LogicValue'
助言がありますか?
Swift 3/4:の更新
オプションはブール式ではなくなり、廃止されたfunc dismissModalViewControllerAnimated(animated: Bool)
はSwiftで使用できなくなりました。
完了パラメーターをオプションのクロージャーとして宣言し、それを
func dismiss(animated flag: Bool, completion: (() -> Void)? = nil)
オプションのクロージャーも必要です:
func dismiss(completion: (() -> Void)? = nil) {
self.dismiss(animated: true, completion: completion)
}
古い(Swift 1.x?)答え:
completion
パラメーターを(暗黙的にアンラップ)optionalクロージャー(() -> Void)!
:
func dismiss(completion: (() -> Void)!) {
if (completion) {
return self.dismissViewControllerAnimated(true, completion: completion)
}
self.dismissModalViewControllerAnimated(true)
}
しかし、あなたが呼び出すことができることに注意してください
self.dismissViewControllerAnimated(true, completion: completion)
いずれにしても、その関数のcompletion
パラメーターもオプションであるためです。そして
func dismissModalViewControllerAnimated(animated: Bool)
廃止予定として実際にマークされます。
上記のMartin Rの回答に追加するだけです。
コールバックはオプションである場合があり、暗黙的なパラメーター(感嘆符付き)の代わりに、オプションの演算子を使用します。
func dismiss(completion: (() -> Void)?) {
if completion != nil {
return self.dismissViewControllerAnimated(true, completion: completion!)
}
self.dismissModalViewControllerAnimated(true)
}
コールバック宣言に_= nil
_を追加して、呼び出し中にnilを渡さないようにすることをお勧めします。
_func dismiss(completion: (() -> Void)? = nil) {
if (completion) {
return self.dismissViewControllerAnimated(true, completion: completion)
}
self.dismissModalViewControllerAnimated(true) }
_
そして、次のように関数を呼び出すことができます:dismiss()