Swift 4 Array Map От нуля до строки - PullRequest
0 голосов
/ 27 декабря 2018

, поэтому у меня есть этот простой код, и у меня проблема с быстрым типом данных, я хочу отобразить этот массив с

 ["a", "b", nil, "c", "d", nil]

на

 ["a", "b", "z", "c", "d", "z"]

, так что это мой текущий код

import Foundation

let array1 = ["a", "b", nil, "c", "d", nil]
let newArray = array1.map { (currentIndex: Any) -> String in
    if currentIndex == nil  {
        return "z"
    }
    return currentIndex as! String
}
print(newArray)

Я благодарен, если вы попытаетесь решить код.спасибо.

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Ваш код абсолютно прав, но проблема в том, что вам нужно передать необязательный аргумент в выражении map, как показано ниже, и бинго, ваш код полностью работает.

let array1 = ["a", "b", nil, "c", "d", nil]
let newArray = array1.map { (currentIndex: Any?) -> String in
    if currentIndex == nil  {
        return "z"
    }
    return (currentIndex as? String ?? "")
}
print(newArray)
0 голосов
/ 27 декабря 2018

Если вы объявите currentIndex как Any, вы больше не сможете сравнивать его с nil.В вашем случае правильный тип будет String?:

let newArray = array1.map { (currentIndex: String?) -> String in
    if currentIndex == nil  {
        return "z"
    }
    return currentIndex!
}

Однако компилятор может автоматически определить это из контекста:

let newArray = array1.map { currentIndex -> String in
    if currentIndex == nil  {
        return "z"
    }
    return currentIndex!
}

Лучше использовать оператор nil-coalescing ?? и избегать принудительного развертывания:

let newArray = array1.map { currentIndex in
    currentIndex ?? "z"
}

или короче:

let newArray = array1.map { $0 ?? "z"  }
...