2017-04-26 4 views
1

Ich verwende FMDatabase, und es ein Array von Parametern übergeben möchten, die optionale Werte enthalten können. Das ist gut, aber das Problem ist, dass ich es nicht zum Laufen bringen kann, ohne eine Warnung vor implizitem Zwang zu bekommen. Wenn ich es ein [Any?] Array übergeben bekomme ich eine Warnung in der Funktion, aber wenn ich es übergebe [Any] Array bekomme ich eine Warnung immer wenn ich ein optionales Array hinzufügen. Das Beste, was ich habe in der Lage gewesen ist, es nach unten mit diesem Code auf eine einzige Warnung schneiden zu tun:Casting [Beliebige?] Zu [Beliebige] ohne eine Warnung

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]) 
    } 
} 

Ich weiß, Sie as Any verwenden können, dieses Problem mit einem regelmäßigen Any Objekt zu vermeiden, aber ich kann nicht verstehen heraus, wie man es mit einem Array macht.

Antwort

2

Mit map[Any?] in [Any] konvertieren.

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] 
Verwandte Themen