Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 迁移到swift 3,现在收到错误“;参数标签';(1)及"x27 ;;不匹配任何可用的重载_Ios_Swift3_Xcode8 - Fatal编程技术网

Ios 迁移到swift 3,现在收到错误“;参数标签';(1)及"x27 ;;不匹配任何可用的重载

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

我已经搜索和阅读了许多似乎有同样问题的主题,但我找不到任何类似的例子。我刚刚将一个现有项目从swift 2.x(不记得是哪个版本)转换为Xcode8/swift 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
尝试将“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()