没有更多上下文信息的情况下,表达式类型不明确。使用结构体属性作为字典键。

3

我遇到了一个异常:

表达式的类型在没有更多上下文的情况下是不明确的

出错代码如下:

struct Parameter { 
    static let Email = "email" 
    static let Password = "password" 
    static let IsFacebookUser = "isFacebookUser" 
}

let parameters : [String : AnyObject] = [Parameter.Email : email, Parameter.Password : password, Parameter.IsFacebookUser : false]

它不接受bool类型,而我不想改变我的数据类型。

这段代码有什么问题吗?


3
展示您的参数声明 - Sahil Kapoor
1
你的代码在 Playground 中对我有效。 - Eric Aya
请展示给我们 emailpassword 的类型。 - Luca Angeletti
让电子邮件 = emailTextField.text 让密码 = passwordTextField.text - Yasir Ali
2个回答

6

您的电子邮件和密码是可选变量,您需要提供非nil值给字典,因此,应使用!作为后缀来解包它们。尝试以下方法:

let parameters : [String : AnyObject] = [Parameter.Email : email!, Parameter.Password : password!, Parameter.IsFacebookUser : false]

另外,你也可以这样做

email = emailTextField.text!
password = passwordTextField.text!

此外,将您的结构体替换为枚举。

enum Parameter: String {
    case Email: "emailKey"
    ...
}

然后在创建字典时使用 Parameter.Email.rawValue


我正在使用结构体来处理参数,问题出在布尔值上而不是字符串... 结构体 Parameter { static let Email = "email" static let Password = "password" static let IsFacebookUser = "isFacebookUser" } - Yasir Ali
仍然遇到相同的问题... 让参数:[String:AnyObject] = [Parameter.Email.rawValue:email,Parameter.Password.rawValue:password,Parameter.IsFacebookUser.rawValue:false] - Yasir Ali
@YasirAli:我猜你是提问者。请尝试在“email”和“password”中添加“!”的解决方案,并告诉我们结果。 - Luca Angeletti
@YasirAli 我认为你对Swift非常新。你的电子邮件和密码是可选变量,你需要向字典提供非空值,因此应该使用!作为后缀来解包它们。 - Sahil Kapoor
@SahilKapoor和appzYourLife:感谢您添加了!后缀解决了我的问题,请编辑您的答案,以便我可以将其标记为已接受。此外,为什么我应该使用枚举而不是结构体? - Yasir Ali

0

当我们向结构对象传递错误的参数类型时,也会出现这种类型的错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接