【问题标题】:What the meaning of question mark '?' in swift? [duplicate]问号“?”是什么意思?迅速? [复制]
【发布时间】:2014-07-26 06:26:20
【问题描述】:

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

var window: UIWindow?

谁能解释一下它的用途?

【问题讨论】:

  • @Vladimir,angelo 我不能从 stackOverflow 学习吗?
  • 我没有对你投反对票,但我确实认为应该投反对票。您在问一个如此基本的问题,很难相信您已经尽职尽责并试图从语言参考中找到答案(目前只有一种语言参考的事实意味着您甚至不能说您的参考书没有解释很好:它实际上是它解释的第一件事)。
  • 但是这个问题对其他用户也有帮助,因为没有人有时间看书..
  • @MattGibson - 现在每天每个人都只需在 Goole 上输入查询,对于这个基本的东西,谁会搜索整本书?就像如果我想知道如何在数组中添加对象,那么我只会谷歌它,没有人会搜索整本书的页面来得到一个基本问题,我之前也在谷歌上搜索过这个问题,但没有找到任何可靠的解决方案。
  • @Rajneesh071 这是因为它是如此基本且可用的人不需要其他人的帮助来回答这个问题

标签: ios swift


【解决方案1】:

类型后的问号引用Optionals,这是 Swift 中的一种方式,它可以让您指示任何类型的值可能根本不存在,而无需特殊常量。

它用于与您在 Objective-C 中显式使用 return nil 相同的情况下,当没有要返回的对象时,或者对于不是对象的值,常量,例如 NSNotFound。 Optional 提供了一种在所有数据类型中实现此目的的一致方式。

来自 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"

因为 toInt 方法可能会失败,所以它返回一个可选的 Int, 而不是一个 Int。可选的 Int 写为 Int?,而不是 Int。这 问号表示它包含的值是可选的, 意味着它可能包含一些 Int 值,或者它可能不包含 完全有价值。 (它不能包含任何其他内容,例如 Bool 值或 一个字符串值。它要么是一个 Int,要么什么都不是。)

语言参考 iBook on Optionals 有一整节,它们在整本书中被多次提及。您应该彻底了解它,因为它是 Swift 编程的基本概念,并且在许多其他语言中并不流行。

【讨论】:

  • let posString = "123" let convertString = posString.Int() convertString 'String' 类型的值没有数字 'Int'
【解决方案2】:

类型的可选值。

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

【讨论】:

    【解决方案3】:

    您可以同时使用 iflet 来处理可能存在的值 失踪。这些值表示为optionals。一个optional value 要么包含一个值,要么包含 nil,以指示 价值缺失。在值的类型后写一个问号 (?) 将值标记为optional

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

    摘自:Apple Inc. “Swift 编程语言”。电子书。 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。如果我们将optionalName 的值设置为nilif 条件结果将是 false 并且 if 中的代码将被跳过。

    【讨论】:

    • 我认为greeting 的结果是“Hello, John Appleseed”,而如果optionalNamenil,结果将是“Hello!”,逗号和感叹号实际上可以帮助我更好地理解它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 2014-07-28
    • 1970-01-01
    • 2015-02-13
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多