私はSettingsViewController
を持っており、各設定に必要な情報を定義する構造体を作成しました。なぜこのクロージャには私が期待する議論がないのですか?
///Represents a list of the options needed to populate a `SettingsTableViewCell`
public struct Setting {
///The image to use for the icon
var imageName : String
///The text to display as the title of the setting
var title : String
///Called when the switch is tapped. If no closure is supplied, the switch is hidden
var switchCallback: ((_ status: Bool)->())?
}
ビューコントローラは、後でテーブルビューで使用するためにこれらの設定の配列を保持します。 1の例を以下に提供されています。私がコンパイルしようとすると
let options : [Setting] =
[
Setting(imageName: "notifications", title: "Bump Notifications") {updateNotificationSetting($0)},
...
]
しかし、私はエラーを提示しています:(SettingsViewController)
がどこから来ている
Cannot convert value of type '(SettingsViewController) -> (Bool) ->()' to expected argument type '((Bool) ->())?'
誰かが、してください説明できますか?あなたができるなら、私はそれを修正するために何を変える必要がありますか? SSCCEについては
、以下を参照:
import UIKit
///Represents a list of the options needed to populate a `SettingsTableViewCell`
public struct Setting {
///The image to use for the icon
var imageName : String
///The text to display as the title of the setting
var title : String
///Called when the switch is tapped. If no closure is supplied, the switch is hidden
var switchCallback: ((_ status: Bool)->())?
}
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
let options : [Setting] =
[
//Error is on the following line
Setting(imageName: "notifications", title: "Bump Notifications") {isOn in updateSetting(isOn)},
]
func updateSetting(isOn : Bool) {
}
}
あなたのクローズの初期化のどこかで。 – Sulthan
閉包に明示的な 'self'はありませんが(上記参照)、' updateNotifications($ 0) 'の前に暗黙のものがあると思います。この場合、その関数をどのように呼び出すかに関する提案はどうですか? –
関連していませんが、Swift 3では、コールバッククロージャのすべてのパラメータラベルが削除されています。コールバックのシグネチャは、エラーメッセージに表示されているように '(Bool) - >()'のみであり、 'status'はまったく使用されません。 – vadian