在浏览Apple的Swift教程时,我们会非常快速地介绍选项,告知我们使用'?'将值标记为可选字符。
给出的例子是:
let optionalInt: Int? = 9
接着说:
“要从可选项中获取基础类型(我的重点,而不是他们的),你需要打开它。你将学习以后解包的选项,但最直接的方法是使用力量unwrap operator(!)。如果您确定基础值不是nil,则仅使用unwrap运算符。
let actualInt: Int = optionalInt!
这可能过于挑剔,但不应该说“要获得潜在的值 ...”而不是类型?
无论如何,我的实际问题是关于问号的使用。在上面的例子之后我们被告知:
"Optionals are pervasive in Swift, and are very useful for many
situations where a value may or may not be present. They’re
especially useful for attempted type conversions."
var myString = "7" "7"
var possibleInt = Int(myString) 7
print(possibleInt) "Optional(7)\n"
In this code, the value of possibleInt is 7, because myString
contains the value of an integer. But if you change myString to be
something that can’t be converted to an integer, possibleInt becomes nil.
myString = "banana" "banana"
possibleInt = Int(myString) nil
print(possibleInt) "nil\n"
为什么,在告诉我们选项用'?'声明之后,他们会给出一个显然使用不带'?'的可选项的例子。 我试着查看文档并搜索其他堆栈溢出答案,也许我只是遗漏了一些东西,但由于某种原因,我找不到这个看似简单问题的答案。
答案 0 :(得分:4)
这可能不是最明显的例子,因为类型推断隐藏了问号。如果他们明确声明possibleInt
的类型,您会看到:
var myString: String = "7" "7"
var possibleInt: Int? = Int(myString) 7
print(possibleInt) "Optional(7)\n"
正在发生的事情是init(_: String)
Int
初始化程序被称为“可用的初始化程序”,它返回一个可选的Int
,即Int?
。