//: Playground - noun: a place where people can playimport UIKit//Workslet possibleNumber="2"if let actualNumber = Int(possibleNumber) { print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")}else { print("Could not be converted to integer")}//Doesn't Work and I'm not sure whylet testTextFIEld = UITextFIEld()testTextFIEld.text = "2"let numberString = testTextFIEld.text //I kNow this is redundantif let num = Int(numberString) { print("The number is: \(num)")}else { print("Could not be converted to integer")}
代码的顶部部分直接来自Apple的Swift 2电子书,对我来说如何使用可选绑定将字符串转换为int是有意义的.第二段代码基本相同,只是字符串来自UITextFIEld的text属性.代码的底部给出以下错误:
游乐场执行失败:/var/folders/nl/5dr8btl543j51jkqypj4252mpcnq11/T/./lldb/843/playground21.swift:18:18:错误:可选类型’String?’的值没有打开;你的意思是用’!’要么 ‘?’?
if let num = Int(numberString){
我通过使用这一行解决了这个问题:
if let num = Int(numberString!) {
我只是想知道为什么第二个例子需要!而第一个没有.我确定问题与我从文本字段中获取字符串这一事实有关.谢谢!
解决方法 不同之处在于,在第一种情况下,possibleNumber不是可选变量.这绝对是一个字符串.它不能是零.在第二种情况下,textFIEld.text返回一个可选字符串,因此numberString是一个可选变量.它可能是零.
现在……转换Int(“”)返回一个可选的int.如果字符串是“abc”,那么它不能返回一个数字,所以返回nil.这就是你用if let语句展开的内容.
但是,在第二种情况下,您的字符串也是可选的,Int()将不接受可选字符串.所以你强行打开它.这很危险,因为如果字符串为零,它可能会使应用程序崩溃.
你可以做的是……
if let numberString = textFeIDl.text,number = Int(numberString) { // use the number}
这将首先解开文本,如果它可用,则使用它.得到号码.如果那不是零则输入块.
在Swift 2中你也可以在这里使用guard let功能.
刚刚看到你正在使用Swift 2.
你也可以这样做……
func getNumber() -> Int { guard let numberString = textFIEld.text,number = Int(numberString) else { return 0 } return number}总结
以上是内存溢出为你收集整理的ios – 如何在Swift 2中使用可选绑定全部内容,希望文章能够帮你解决ios – 如何在Swift 2中使用可选绑定所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)