Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.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 当变量类型为Int并且没有';t swift 3中的零值_Ios_Swift3 - Fatal编程技术网

Ios 当变量类型为Int并且没有';t swift 3中的零值

Ios 当变量类型为Int并且没有';t swift 3中的零值,ios,swift3,Ios,Swift3,我正在尝试将字符串转换为Int。首先, let ageString: String = "27" let ageInt:Int = Int(ageString)! 系统要求使用感叹号(!)标记展开 但在下面的方式中 let ageString: String = "27" let ageInt = Int(ageString) 没关系。为什么是比 您尝试使用的Int将返回可选的Int?值 因此,通过let ageInt:Int的第一次声明,您明确指定ageInt到Int的类型,Int(age

我正在尝试将
字符串
转换为
Int
。首先,

let ageString: String = "27"
let ageInt:Int = Int(ageString)!
系统要求使用感叹号(!)标记
展开

但在下面的方式中

let ageString: String = "27"
let ageInt = Int(ageString)
没关系。为什么是比

您尝试使用的
Int
将返回可选的
Int?

因此,通过
let ageInt:Int
第一次声明,您明确指定
ageInt
Int
的类型,
Int(ageString)
的结果是
Int?
,这样编译器就告诉您通过添加
来打开可选项在末尾

现在使用
第二次声明让ageInt
您还没有指定结果的类型,因此其可选的
Int?
类型和编译器不会提示您添加

现在,如果
ageString
不是下面的有效整数,第一个声明将崩溃

let ageString: String =  "27.5" //Float or some string "hello"
let ageInt:Int = Int(ageString)! // This line give you unexpectedly found nil crash
如果
ageString
不是有效整数,则第二次声明将不会发生这种情况

您尝试使用的
Int
将返回可选的
Int?

因此,通过
let ageInt:Int
第一次声明,您明确指定
ageInt
Int
的类型,
Int(ageString)
的结果是
Int?
,这样编译器就告诉您通过添加
来打开可选项在末尾

现在使用
第二次声明让ageInt
您还没有指定结果的类型,因此其可选的
Int?
类型和编译器不会提示您添加

现在,如果
ageString
不是下面的有效整数,第一个声明将崩溃

let ageString: String =  "27.5" //Float or some string "hello"
let ageInt:Int = Int(ageString)! // This line give you unexpectedly found nil crash
如果
ageString
不是有效整数,则第二次声明将不会发生这种情况


因为编译器不知道
Int(ageString)
将生成实际的
Int
值。在您的情况下,
ageString
27
,但是如果
ageString
adsfds
,该怎么办


因此,在这种情况下,输出将是
Nil
,因此通过强制
展开您是说输出将是
Int

,因为编译器不知道
Int(ageString)
将产生实际的
Int
值。在您的情况下,
ageString
27
,但是如果
ageString
adsfds
,该怎么办


因此,在这种情况下,输出将是
Nil
,因此通过强制
展开您是说输出将是
Int

在第一个输出中,您告诉ageInt具有Int类型。因此它不能具有零值。 在第二个例子中,你没有告诉它应该是什么类型的。所以它会变为Int?类型并可以获取nil值。看看这个:

let ageInt:Int = Int(ageString)!
let ageOptionalInt = Int(ageString)
let ageOptionalInt2: Int? = Int(ageString)

在第一个示例中,您告诉ageInt具有Int类型。因此它不能具有零值。 在第二个例子中,你没有告诉它应该是什么类型的。所以它会变为Int?类型并可以获取nil值。看看这个:

let ageInt:Int = Int(ageString)!
let ageOptionalInt = Int(ageString)
let ageOptionalInt2: Int? = Int(ageString)

使用此扩展名将字符串转换为Int

extension String {

    var toInt:Int?{
        get{
            return Int(self)
        }
    }


}


let a = "55".toInt

使用此扩展名将字符串转换为Int

extension String {

    var toInt:Int?{
        get{
            return Int(self)
        }
    }


}


let a = "55".toInt