swift - 在没有警告的情况下将 [Any?] 转换为 [Any]

标签 swift

我正在使用 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/

相关文章:

ios - 无法使用 JSON 解码器解析 JSON

swift - Swift 中 advanceBy 的预期行为

ios - 正在调用 willDisplayHeaderView 但 titleForHeaderInSection 中的文本属性保持不变

ios - 我无法停止计时器

ios - SwiftyJSON 问题

ios - 为什么 scrollViewWillEndDragging 会影响 UICollectionView 和 UITableView?

swift - 键入时检查 UITextField 中的字符串长度

Swift:通用幂函数作为中缀运算符

ios - 代码 8 : Cannot inherit from non-open class

ios - 如何将Bottom Bar与SpriteKit一起使用?