问号'含义'是什么意思?在快速?

Raj*_*071 81 ios swift

在Swift编程中,我发现了一些带有对象的问号.

var window: UIWindow?
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释它的使用吗?

Sal*_*idi 61

您可以使用iflet一起处理可能缺少的值.这些值表示为optionals.一个optional 值或者包含值或含有nil指示该值缺失.在值的类型后面写一个问号(?)以将值标记为optional.

如果是可选值nil,则条件为,false并且跳过括号中的代码.否则,将解包可选值并将其分配给常量let,这使得在代码块内可用的展开值可用.

摘录自:Apple Inc."The Swift Programming Language."iBooks.https://itun.es/pk/jEUH0.l

例如:

var optionalString: String? = "Hello"
optionalString == nil

var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
    greeting = "Hello, \(name)"
}
Run Code Online (Sandbox Code Playgroud)

在此代码中,输出将是Hello! John Appleseed.如果我们设置optionalNameas 的值nil.在if有条件的结果将是false和里面的代码if会得到跳过.


Cez*_*zar 20

类型后面的问号是指OptionalsSwift中的一种方式,它允许您指示任何类型的值可能不存在的可能性,而不需要特殊常量.

它用于你return nil在Objective-C中显式的相同情况,当没有要返回的对象时,或者对于不是对象的值,常量如NSNotFound.Optionals提供了在所有数据类型中实现此目标的一致方法.

来自Apple提供的iBook

您可以在可能缺少值的情况下使用选项.一个可选的说:

  • 有一个值,它等于x

要么

  • 根本没有价值

这是一个例子.Swift的String类型有一个名为toInt的方法,它试图将String值转换为Int值.但是,并非每个字符串都可以转换为整数.字符串"123"可以转换为数值123,但字符串"hello,world"没有明显的数值可以转换为.

let possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()
// convertedNumber is inferred to be of type "Int?", or "optional Int"
Run Code Online (Sandbox Code Playgroud)

因为toInt方法可能会失败,所以它返回一个可选的Int,而不是Int.可选的Int写为Int ?,而不是Int.问号表示它包含的值是可选的,这意味着它可能包含一些Int值,或者它可能根本不包含任何值.(它不能包含任何其他内容,例如Bool值或String值.它可以是Int,也可以不是.)

有关语言参考iBook on Optionals的整个部分,在整本书中都提到了几次.您应该仔细研究它,因为它是Swift编程的基本概念,并且在许多其他语言中并不普遍.