2017-04-26 64 views
1

我正在使用FMDatabase,並且想要傳遞一個可能包含可選值的參數數組。這個編譯好,但問題是,我不能得到它的工作沒有得到有關隱式強制的警告。如果我通過一個[Any?]數組,我會在函數中得到一個警告,但是如果我將它傳遞給一個[Any]數組,每當向數組添加一個可選項時,我都會收到警告。我已經能夠做的最好的是與此代碼剪下來到一個警告:在沒有任何警告的情況下將[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對象的問題,但我不明白瞭解如何使用數組來完成它。

回答

2

使用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] 
相關問題