在Swift编程中,我发现了一些带有对象的问号。
var window: UIWindow?
任何人都可以解释它的使用吗?
答案 0 :(得分:55)
您可以一起使用
if
和let
来处理可能的值 失踪。这些值表示为optionals
。一个optional
值包含一个值或包含nil
以表示该值 价值缺失。在值的类型后面写一个问号(?) 将值标记为optional
。如果可选值为
nil
,则条件为false
,代码为let
跳过括号。否则,将打开可选值并将其打开 在var optionalString: String? = "Hello" optionalString == nil var optionalName: String? = "John Appleseed" var greeting = "Hello!" if let name = optionalName { greeting = "Hello, \(name)" }
之后分配给常量,它产生未包装的值 在代码块中可用。
摘自:Apple Inc.“The Swift Programming Language。”iBooks。 https://itun.es/pk/jEUH0.l
例如:
Hello! John Appleseed
在此代码中,输出为optionalName
。如果我们将nil
的值设置为if
。 false
条件结果为if
,{{1}}内的代码将被跳过。
答案 1 :(得分:20)
类型之后的问号引用Optionals
,这是Swift中的一种方式,它允许您指示可能根本不存在任何类型的值,而不需要特殊常量。
它在Objective-C中明确return nil
的情况下使用,当没有要返回的对象时,或者对于不是对象的值,常量如{ {1}}。 Optionals提供了在所有数据类型中实现此目标的一致方法。
来自Apple提供的iBook
在可能缺席值的情况下使用选项。一个 可选说:
- 有一个值,它等于x
或
- 根本没有价值
这是一个例子。 Swift的String类型有一个名为toInt的方法, 它试图将String值转换为Int值。但是,不是 每个字符串都可以转换为整数。字符串" 123"可 转换为数值123,但字符串"你好,世界" 没有明显的数值可以转换为。
NSNotFound
因为toInt方法可能会失败,所以它返回一个可选的Int, 而不是Int。可选的Int写为Int ?,而不是Int。该 问号表示它包含的值是可选的, 意味着它可能包含一些Int值,或者它可能包含no 价值。 (它不能包含任何其他内容,例如Bool值或 一个字符串值。它要么是Int,要么根本就没有。)
关于ibis on Optionals的语言参考有一整节,整本书中都提到了几次。你应该仔细研究它,因为它是Swift编程的基本概念,并且在许多其他语言中并不普遍。
答案 2 :(得分:1)
类型的可选值。
对于Ex:
类型转换运算符的可选版本:as?
,用于类型转换的平均as
用于转换可能是可选的。