迁移到迅速3现在变得错误“参数标签”(_ :)'不匹配任何可用的重载
我已经搜索并阅读了许多似乎有同样问题的主题,但我无法找到任何类似我只是将现有的项目从swift 2.x(不记得是哪个版本)转换成Xcode8/swift 3.代码在应用程序商店中生效,所以清楚地工作在之前。迁移到迅速3现在变得错误“参数标签”(_ :)'不匹配任何可用的重载
现在我得到请看我的代码如下:
//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
有它需要在夫特3
-
的重大变化,所有的方法/函数提供一个标签为第一个参数。可以通过下划线字符来抑制该规则,但苹果改变了所有相关方法以符合该规则。所以,你必须写
userName = NSString(string:loginUserName.text)
出现另一个问题,因为uppercased
已更改为uppercased()
为什么您从东西String
这是一个String
反正做?
顺便说一下,这是Swift。使用String
而不是NSString
。
var userEmail = ""
var userName = ""
var userPassword = ""
var userNamePass = ""
userName = loginUserName.text ?? ""
userPassword = loginPassword.text ?? ""
userNamePass = userName.uppercased() + userPassword.uppercased()
尝试添加“string:”参数标签到所有的N SString初始化器调用。例如,下面的代码工作在一个运动场(的XCode 8 GM与夫特3):
let userName = NSString(string: "hello")
print(userName)
尝试在初始化程序中使用“string:”。
userName = NSString(string: loginPassword.text)
此外,如果loginPassword.text是可选的它可能需要解开。
这是非常有用的,有助于解释什么可能在swift 3中将变量转换为不同类型。 –
我曾经使用过NSString,因为我不认为.uppercase方法可用于String类型。我已转换为字符串,似乎已解决了直接的问题。欣赏小费。 –
虽然这提供了很好的建议,但实际上并没有回答被问到的问题。我会更新答案来解释什么是错误的以及如何解决它,然后提供这个建议作为编写代码的正确方法。 – rmaddy
谢谢rmaddy。我回来发布相同的东西...我需要了解什么改变了迅速3现在抛出一个错误的行代码在swift 2.x工作正常。将某些东西转换为新的类型是非常标准的东西,所以我很惊讶地发现这会引发错误。谢谢大家。 –