Как напечатать строку из plist без "Необязательно"?
Я загружаю значение из словаря в plist, но когда я его печатаю на консоль, он печатает: Необязательно (название понедельника), а не просто "Название понедельника".
Как я могу избавиться от параметра Optional() моего значения при печати?
var plistPath = NSBundle.mainBundle().pathForResource("days", ofType: "plist")
var plistArray = NSArray(contentsOfFile: plistPath!) as NSArray!
for obj: AnyObject in plistArray {
if var dicInfo = obj as? NSDictionary {
let todayTitle: AnyObject? = dicInfo.valueForKey("Title")
println(todayTitle)
}
}
Ответы
Ответ 1
Один способ избавиться от Optional
- использовать восклицательный знак:
println(todayTitle!)
Однако вы должны сделать это, только если вы уверены, что это значение. Другой способ - развернуть и использовать условное выражение, например:
if let theTitle = todayTitle {
println(theTitle)
}
Вставьте эту программу в runswiftlang для демонстрации:
let todayTitle : String? = "today"
println(todayTitle)
println(todayTitle!)
if let theTitle = todayTitle {
println(theTitle)
}
Ответ 2
Другой, немного более компактный, способ (явно спорный, но это хотя бы один лайнер)
(result["ip"] ?? "unavailable").description
.
В теории result["ip"] ?? "unavailable"
тоже должна работать, но это не так, если только в 2.2
Конечно, замените "недоступным" на то, что вам подходит: "nil", "not found" и т.д.
Ответ 3
С некоторой попыткой, я думаю, что этот путь лучше.
(variableName ?? "default value")!
Используйте ??
для значения по умолчанию, а затем используйте !
для разворачивания необязательной переменной.
Вот пример,
var a:String? = nil
var b:String? = "Hello"
print("varA = \( (a ?? "variable A is nil.")! )")
print("varB = \( (b ?? "variable B is nil.")! )")
Он напечатает
varA = variable A is nil.
varB = Hello
Ответ 4
Я не уверен, что правильный процесс для ссылки на другие ответы, но мой ответ на аналогичный вопрос также применяется здесь.
Ответ Valentin достаточно хорошо подходит для опций типа String?
, но не будет работать, если вы хотите сделать что-то вроде:
let i? = 88
print("The value of i is: \(i ?? "nil")") // Compiler error
Ответ 5
Swift 3.1
Из Swift 3 вы можете использовать String(describing:)
для печати необязательного значения. Но синтаксис довольно сосать, и результат нелегко увидеть в консольном журнале.
Итак, я создаю расширение Optional
, чтобы сделать последовательное значение nil
.
extension Optional {
var logable: Any {
switch self {
case .none:
return "⁉️" // Change you whatever you want
case let .some(value):
return value
}
}
}
Как использовать:
var a, b: Int?
a = nil
b = 1000
print("a: ", a.logable)
print("b: ", b.logable)
Результат:
a: ⁉️
b: 1000
Ответ 6
инициализировать
Var text: string? = nil
Печать
print("my string", text! as string)
Это позволит избежать слова "необязательно" перед строкой.