2017-02-15 3 views
-1

Я использую функцию карты и должен отображать пустую строку в nil, иначе строку. Проблема в том, что вход Any?Swift map empty string to nil

var arr : Any? = ["hallo", "", nil, "hihi"] 
let res = arr.map{ (($0 ?? "") as! String).isEmpty ? nil : $0 } 
print(res) 

Вы знаете, как это сделать?

Функция карта это здесь:

id <- (map["id"], TransformOf<Int, String>(fromJSON: { Int($0!) }, toJSON: { $0.map { String($0) } })) 

https://github.com/Hearst-DD/ObjectMapper#custom-transforms

+0

Разве вы не хотите игнорировать объект nil из массива? –

+0

Каков результат кода, который вы опубликовали? – rmaddy

+0

Я думаю, что результат должен быть ["hallo", nil, nil, "hihi"] @rmaddy – Cruz

ответ

0

ли вы имеете в виду, как это:

var arr : Any? = ["hallo", "", nil, "hihi"] 
if let array = arr as? [String?] { 
    let result = array.map { ($0?.isEmpty ?? true) ? nil : $0 } 
    print(result) 
} 
0

Сохранение массива является Any? сомнительна, но если надо .. .

let arr: Any? = ["hallo", "", nil, "hihi"] 

guard let casted = arr as? [String?] else { 
    // handle error 
    fatalError("arr is not a [String?]") 
} 

let result: [String?] = casted.map{ 
    guard let s = $0 else { return nil } 
    return s.isEmpty ? nil : s 
} 

print(result as Any)