Ios 迁移到swift 3,现在收到错误“;参数标签';(1)及"x27 ;;不匹配任何可用的重载
我已经搜索和阅读了许多似乎有同样问题的主题,但我找不到任何类似的例子。我刚刚将一个现有项目从swift 2.x(不记得是哪个版本)转换为Xcode8/swift 3。代码在应用商店中是实时的,所以很明显以前是有效的 现在,我在一个非常简单的变量初始值设定语句中得到了以下错误。请参阅下面我的代码:Ios 迁移到swift 3,现在收到错误“;参数标签';(1)及"x27 ;;不匹配任何可用的重载,ios,swift3,xcode8,Ios,Swift3,Xcode8,我已经搜索和阅读了许多似乎有同样问题的主题,但我找不到任何类似的例子。我刚刚将一个现有项目从swift 2.x(不记得是哪个版本)转换为Xcode8/swift 3。代码在应用商店中是实时的,所以很明显以前是有效的 现在,我在一个非常简单的变量初始值设定语句中得到了以下错误。请参阅下面我的代码: //GLOBAL VARIABLES - NEW------------------------------------- var userEmail = NSString() var userNam
//GLOBAL VARIABLES - NEW-------------------------------------
var userEmail = NSString()
var userName = NSString()
var userPassword = NSString()
var userNamePass = NSString()
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var loginUserName: UITextField!
@IBOutlet weak var loginPassword: UITextField!
@IBAction func loginButton(_ sender: AnyObject) {
userName = NSString(loginUserName.text) //throws error "argument labels '(_:)' do not match any available overloads
userPassword = NSString(loginPassword.text) //throws error "argument labels '(_:)' do not match any available overloads
userNamePass = NSString("\(userName.uppercased)\(userPassword.uppercased)") //throws error "argument labels '(_:)' do not match any available overloads
//other code in the login function
} //end login function
尝试将“string:”参数标签添加到所有NSString初始值设定项调用中。例如,以下代码适用于操场(XCode 8 GM和Swift 3):
Swift 3有一个重大变化
- 要求所有方法/函数为第一个参数提供一个标签。可以通过下划线字符来抑制该规则,但苹果更改了所有相关方法以符合该规则。所以你必须写作
userName = NSString(string:loginUserName.text)
uppercased
已更改为uppercased()
你为什么要从一个
字符串
中创建一个字符串
顺便说一下,这是斯威夫特。使用String
而不是NSString
var userEmail = ""
var userName = ""
var userPassword = ""
var userNamePass = ""
userName = loginUserName.text ?? ""
userPassword = loginPassword.text ?? ""
userNamePass = userName.uppercased() + userPassword.uppercased()
尝试在初始值设定项中使用“string:”
userName=NSString(string:loginPassword.text)
另外,如果loginPassword.text是可选的,则可能需要将其展开。我之所以使用NSString,是因为我不这么认为。字符串类型上提供了大写方法。我已经转换成字符串,这似乎解决了眼前的问题。感谢这个提示。虽然这提供了很好的建议,但实际上并没有回答所问的问题。我会更新答案来解释什么是错误的以及如何修复它,然后提供这个建议作为编写代码的正确方法。谢谢rmaddy。我回来发布了同样的东西…我需要了解swift 3中发生了什么变化,现在在swift 2.x中运行良好的一行代码上抛出了一个错误。将某些东西转换为新类型是非常标准的事情,所以我很惊讶地看到这会抛出一个错误。感谢大家。这非常有帮助,有助于解释swift 3在将变量转换为不同类型方面可能发生的变化。
var userEmail = ""
var userName = ""
var userPassword = ""
var userNamePass = ""
userName = loginUserName.text ?? ""
userPassword = loginPassword.text ?? ""
userNamePass = userName.uppercased() + userPassword.uppercased()