我在为元组集合声明类型Void时遇到了一些麻烦。
我收到错误:Nil is not compatible with expected element type 'Void '
var messages: [(person: String, type: String, text: String, action: Void, isSender: Bool)]? = [
(person: "Buddy", type: "instruction", text: "Wat vervelend van uw schade. De volgende vragen moeten direct op locatie ingevuld worden", action: nil, isSender: false),
(person: "User", type: "question", text: "Wat is uw locatie en tijd?", action: askPermissionForGPS(), isSender: true)
]
我已经尝试在字典集合之前放置lazy
以及声明类型Void
,Void -> ()
,() -> Void
的不同方法,但没有结果。
我想要的是元组可以有一个函数作为参数或nil。
答案 0 :(得分:5)
如果您想使用nil
,则必须将action
参数声明为可选
var messages: [(person: String, type: String, text: String, action: Void?, isSender: Bool)]? = [ ...
但我建议将action
参数声明为闭包
var messages: [(person: String, type: String, text: String, action: (()->Void)?, isSender: Bool)]? = [ ...
然后你可以只传递函数名称
(person: "User",
type: "question",
text: "Wat is uw locatie en tijd?",
action: askPermissionForGPS,
isSender: true)
答案 1 :(得分:2)
Void
是typealias
。我假设您希望将操作类型设置为关闭,例如。 () -> ()
。然后,如果它可以nil
- 将其设为可选:(() ->())?