问号的意思是什么? 迅速?

在快速编程中,我发现了一些对象的问号。

var window: UIWindow? 

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

您可以使用iflet来处理可能丢失的值。 这些值表示为optionals 。 一个optional值包含一个值或者包含nil来表示缺失值。 在值的types后面写一个问号(?),将该值标记为optional

如果可选值nil ,则条件为false ,跳过花括号中的代码。 否则,在let之后,可选值被展开并分配给常量,这使得在代码块内可用解包值。

摘录自:苹果公司“Swift编程语言”,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)" } 

在这个代码中,输出将是Hello! John Appleseed Hello! John Appleseed 。 如果我们将optionalName的值设置为nilif条件结果将是falseif将被跳过。

types之后的问号指的是可Optionals ,Swift中的一种方式,可以让你指出一个值可能根本不存在的可能性,而不需要特殊的常量。

在Objective-C中,当没有要返回的对象,或者不是对象的常量,比如NSNotFound常量时,在相同的情况下你会使用它。 Optionals为所有数据types提供了一致的方法。

从苹果提供的iBook

在价值可能不存在的情况下使用可选项。 一个可选的说:

  • 有一个值,它等于x

要么

  • 根本没有价值

这是一个例子。 Swift的Stringtypes有一个名为toInt的方法,它试图将一个String值转换成一个Int值。 但是,并不是每个string都可以转换成一个整数。 string“123”可以转换为数字值123,但string“你好,世界”没有一个明显的数值要转换。

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

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

有关选项的语言参考iBook的一整节,在本书中多次提到。 你应该仔细看看它,因为它是Swift编程的一个基本概念,而且在很多其他语言中并不普遍。

types的可选值。

例如:types转换运算符的可选版本: as? ,意思as用于types转换,可能是可选的转换。