作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 FMDatabase
,并想向它传递一个可能包含可选值的参数数组。这编译得很好,但问题是我无法在没有得到关于隐式强制转换的警告的情况下让它工作。如果我向它传递一个 [Any?]
数组,我会在函数中收到一个警告,但是如果我向它传递一个 [Any]
数组,每当我添加一个可选的数组。我能做的最好的事情就是使用以下代码将其缩减为一个警告:
extension FMDatabase {
func executeQuery(_ sql: String, withArgumentsIn: [Any?]) -> FMResultSet {
// generates a warning:
// "Expression implicitly coerced from 'Any?' to Any"
return self.executeQuery(sql, withArgumentsIn: withArgumentsIn as [Any])
}
}
我知道您可以使用 as Any
来避免常规 Any
对象的问题,但我不知道如何使用数组来做到这一点。
最佳答案
使用 map
将 [Any?]
转换为 [Any]
。
let a: [Any?] = [1, true, Optional("hello"), nil]
let b = a.map { $0 as Any }
print(type(of: a)) // Array<Optional<Any>>
print(a) // [Optional(1), Optional(true), Optional("hello"), nil]
print(type(of: b)) // Array<Any>
print(b) // [Optional(1), Optional(true), Optional("hello"), nil]
关于swift - 在没有警告的情况下将 [Any?] 转换为 [Any],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43645048/
我是一名优秀的程序员,十分优秀!