Swift:找不到“|”的重载接受提供的参数
Posted
技术标签:
【中文标题】Swift:找不到“|”的重载接受提供的参数【英文标题】:Swift: Could not find an overload for '|' that accepts the supplied arguments 【发布时间】:2014-06-10 03:10:06 【问题描述】:尝试将 Parse 合并到一个新的 Swift 项目中。
当我到达这个街区时:
logInViewController.fields = PFLogInFieldsUsernameAndPassword | PFLogInFieldsLogInButton | PFLogInFieldsSignUpButton | PFLogInFieldsPasswordForgotten
我在 XCode 6 中遇到了这个错误:
Could not find an overload for '|' that accepts the supplied arguments
有人碰巧知道这种语法有什么问题吗?
【问题讨论】:
【参考方案1】:使用.value
,然后使用结果创建PFLogInFields
实例:
logInViewController.fields = PFLogInFields(PFLogInFieldsUsernameAndPassword.value
| PFLogInFieldsLogInButton.value)
【讨论】:
【参考方案2】:Timothy 的回答是对的,但最好用 Swift 的更新更正代码。
logInViewController.fields = PFLogInFields(rawValue:
PFLogInFieldsUsernameAndPassword.rawValue |
PFLogInFieldsLogInButton.rawValue)
第二种方式:
您可以对更短的代码使用运算符重载:
func +=(inout slf: PFLogInFields,other: PFLogInFields)-> PFLogInFields
slf = PFLogInFields(rawValue: slf.rawValue | other.rawValue)!
func +(a: PFLogInFields, b: PFLogInFields)-> PFLogInFields
return PFLogInFields(rawValue: a.rawValue | b.rawValue)!
还有:
logInViewController.fields = .UsernameAndPassword + .LogInButton
或
logInViewController.fields = .UsernameAndPassword
logInViewController.fields += .LogInButton
【讨论】:
【参考方案3】:在 Swift 2 中,公认的解决方案或其他答案似乎不起作用。 我通过将 PFLogInFields 包含在一个数组中解决了我的问题。一切似乎都很好。
所以而不是:
loginViewController.fields = PFLogInFields.UsernameAndPassword | PFLogInFields.LogInButton | PFLogInFields.PasswordForgotten | PFLogInFields.SignUpButton | PFLogInFields.Facebook | PFLogInFields.Twitter
我写道:
loginViewController.fields = [PFLogInFields.UsernameAndPassword, PFLogInFields.LogInButton, PFLogInFields.PasswordForgotten, PFLogInFields.SignUpButton, PFLogInFields.Facebook, PFLogInFields.Twitter]
【讨论】:
在将值设置为数组的情况下,您还应该能够避免使用PFLogInFields
前缀【参考方案4】:
似乎这是一个移动的目标,因为这里的答案似乎都不再有效。目前我必须使用这个:
logInViewController.fields = PFLogInFields.UsernameAndPassword | PFLogInFields.LogInButton
【讨论】:
以上是关于Swift:找不到“|”的重载接受提供的参数的主要内容,如果未能解决你的问题,请参考以下文章
找不到接受提供的参数的“logInWithPermissions”的重载
找不到接受类型参数列表的 XCTAssertEqual 的重载 ([String : AnyObject], [String : AnyObject])