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:找不到“|”的重载接受提供的参数的主要内容,如果未能解决你的问题,请参考以下文章

找不到接受提供的参数的“init”的重载

找不到接受提供的参数的“/”的重载

找不到接受提供的参数的 init 重载

找不到接受提供的参数的“logInWithPermissions”的重载

错误:找不到接受提供的参数的“标题”的重载

找不到接受类型参数列表的 XCTAssertEqual 的重载 ([String : AnyObject], [String : AnyObject])