swift Как определить, является ли переменная необязательной

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

Я пробую метод ниже, но терплю неудачу

func isOptional(v: Any) -> Bool {
    return v is Optional
}

person aotian16    schedule 15.07.2015    source источник
comment
Это звучит как проблема XY... Я имею в виду... вы можете сказать это во время компиляции...   -  person nhgrif    schedule 15.07.2015
comment
возможный дубликат Как определить, является ли универсальный необязательно в Swift? (в частности, Any не может быть необязательным, но общий может быть необязательным)   -  person nhgrif    schedule 15.07.2015
comment
@nhgrif спасибо за комментарий. Я тоже вижу эту проблему. Я новичок на свифте, мне тяжело.   -  person aotian16    schedule 15.07.2015


Ответы (1)


В качестве академического упражнения (можно ли это сделать или нужно ли это делать) я придумал следующее:

func isOptional(a: Any) -> Bool {
    return "\(a.dynamicType)".hasPrefix("Swift.Optional")
}

Пример:

let name = "Fred"
let oname: String? = "Jones"
let age = 37
let oage: Int? = 38

let arr: [Any] = [name, oname, age, oage]

for item in arr {
    println("\(item) \(isOptional(item))")
}

Выход:

Fred false
Optional("Jones") true
37 false
Optional(38) true

Могу ли я рекомендовать использовать это в производственном коде? Нет. Я рекомендую держаться подальше от Any, если это вообще возможно, и я бы не стал делать ставку на то, что результат dynamicType останется прежним.

person vacawama    schedule 15.07.2015