gpt4 book ai didi

swift if let statement with as?,但为什么要用问号?

转载 作者:搜寻专家 更新时间:2023-11-01 06:16:22 25 4
gpt4 key购买 nike

我能理解该语句,但足以转换任何类型,为什么后跟一个问号,如:

if let foo = object as? String 

这真的很烦我。这是否意味着对象是可选的或者变量 foo 的返回值是可选的字符串类型?或者它真的只是一种语言语法?它必须意味着什么,否则为什么它首先在那里?这是什么意思? if let 语句中单词后的问号。

我搜索了一下,没找到。

我很困惑当然我知道 object 已经是一个可选的并且被分配给变量 foo 然后 if let 解包它如果它可以解包,还是跳出了下面的语句。

所以 if let 解包过程发生在 as? 类型转换之后,对吗?在 as? 从示例中转换一个可选字符串之后,if let 解包它,而不是分配给变量的可选对象类。

最佳答案

您的代码:

if let foo = object as? String

分为两个重要部分:object as?字符串if let

第一个是向下转换,它通过生成一个可选类型(此处为 String?)来允许失败。来自 The Swift Programming Language (Swift 3.1): Typecasting :

Use the conditional form of the type cast operator (as?) when you are not sure if the downcast will succeed. This form of the operator will always return an optional value, and the value will be nil if the downcast was not possible. This enables you to check for a successful downcast.

第二个,if let,是一个可选的绑定(bind),它解开一个可选的,if let的主体只有在展开的可选值不是 nil 并且绑定(bind)变量绑定(bind)到展开的值。参见 Optional Binding Swift 编程语言(Swift 3.1):基础

所以您认为这里发生了两次的事情是正确的。 as? 转换可能会失败并产生一个 nil 可选值,if let 将测试该可选值是否为 nil。我们只能希望编译器一起处理 if letas? 的组合,并且实现不会实际创建和销毁不必要的可选值。

HTH

关于swift if let statement with as?,但为什么要用问号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44099956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com