- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我能理解该语句,但足以转换任何类型,为什么后跟一个问号,如:
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 benil
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 let
和 as?
的组合,并且实现不会实际创建和销毁不必要的可选值。
HTH
关于swift if let statement with as?,但为什么要用问号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44099956/
这个问题在这里已经有了答案: When to use generic methods and when to use wild-card? (9 个回答) 关闭 4 年前。 我试图理解为什么我们需要
我试图编写一个简单的 C 程序来检查路径名是否具有“.jpg”或“.jpeg”后缀。这是我的程序: #include #include #include regex_t regex; stati
我需要使用以下 URL 重定向传入请求: http://mywebsite.com/abc/mapserv.exe?map=123 到 http://mywebsite.com/abc/mapserv
当从我的应用程序插入一些中文字符时,它们会被写入数据库为“???”。不用说,在内置的命令行 mysql 客户端中一切都可以正常工作。 连接字符串: --user-db-uri = jdbc:mysql
您如何定义验证方法?例子:包括?甚至?奇怪? >> 2.odd? => false >> 6.even? => true >> 最佳答案 与您定义任何其他函数的方式相同 - 问号是函数名称的一部分:
我有一个字符串 $name = "name1?name2?name3?name4"; 我想修改这个变量为 $name2 = "name1/name2/name3/name4"; 使用 PHP preg
我已经搜索了对此的一种解释,但没有找到一种解释。在Prolog谓词的描述中,有时在变量名之前的问号,加号和减号是什么意思? 例: predicate(?Variable1,+Variable2,-Va
在Kotlin中,如果我们将类成员声明为 var 和 nullable 类型,则编译器不允许我们运行成员函数,尽管我们在调用函数之前放置了if语句,因为编译器无法保证该成员在针对null进行检查之后并
我想使用 JDBC 向表中插入一行。但是表有大量列,所以我不想将所有列指定到语句中。还有另一种指定列值的方法吗? INSERT INTO TABLE_NAME VALUES(?, ?, ?, ...,
这是我的应用程序崩溃时看到的(没有明显的原因,有时在启动时,有时在以后)。 我该怎么办? 最佳答案 在文件的两个版本中都更改了一行代码的差异被视为冲突,并且其指示符是一个问号。您必须指定解决所有冲突的
我正在尝试在 SpringData native 查询中使用 Postgres jsonb 字符串存在运算符。 SpringData 方法示例: @Query(value = "SELECT t.id
我从另一个应用程序传递了以下字符串。 2�4�9� (2�4�9�) 我想从上面的字符串中删除问号 ascii 字符。 我该怎么做? 最佳答案 根据这个Uni
我在 Android Activity 的 TextView 中遇到重音字符问题。渲染显示问号而不是字符“è”和“à”。流程是:从网络资源中获取一个 midi 文件 --> 提取歌词 --> 将歌词放
有什么办法可以防止'?'在 HTML/CSS 中被视为空白?这是默认行为,还是我做错了什么? 我有一个包含很长 URL 的 div(长度是动态的)。我希望 URL 将问号视为任何其他字符,而不是在该字
我见过这样的代码片段: export interface IUser { email?: string; firstName?: string; lastName?: stri
我正在从我的数据库中获取包含希伯来语单词的数据。然后我从 ResultSet 中获取这些数据并将其放入一个字符串中,然后将其放入一个 JSONObject 中。 代码如下: response.setC
这个问题在这里已经有了答案: What is an optional value in Swift? (15 个答案) 关闭 8 年前。 在 Swift 编程中,我发现了一些带有对象的问号。 var
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: Save Data in Arabic in MySQL database 我在使用 PHP 从 MYSQL 数
所以我在想,为了在控制台应用程序中实现这样的功能,在函数名称末尾附加一个问号将倒出它的文档字符串,我可能会使用像元类这样的功能,其中在定义/导入时,我将复制所有模块成员名称并生成新的名称,仅用于输入文
我有一个带有一堆标志(静态图像)的表单,每个标志下方都有一个勾选框。用户选择复选框以允许他们使用特定语言。在设计时,我为每种语言设置了对应的本地化复选框标题,在此示例中为“Español”(西类牙语)
我是一名优秀的程序员,十分优秀!