我从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)
}
}
答案 0 :(得分:37)
摆脱Optional
的一种方法是使用感叹号:
println(todayTitle!)
但是,只有在您确定值存在的情况下才应该这样做。另一种方法是打开并使用条件,如下所示:
if let theTitle = todayTitle {
println(theTitle)
}
将此程序粘贴到runswiftlang以进行演示:
let todayTitle : String? = "today"
println(todayTitle)
println(todayTitle!)
if let theTitle = todayTitle {
println(theTitle)
}
答案 1 :(得分:5)
经过一番尝试,我觉得这种方式更好。
(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
答案 2 :(得分:4)
另一种更紧凑的方式(显然有争议,但它至少是一个单一的衬垫)
(result["ip"] ?? "unavailable").description
。
理论上result["ip"] ?? "unavailable"
也应该有效,但事实并非如此,除非在2.2
当然,用适合你的东西替换“不可用”:“nil”,“not found”等
答案 3 :(得分:0)
我不确定链接到其他答案的正确流程是什么,但my answer to a similar question也适用于此。
Valentin的答案适用于String?
类型的可选项,但如果您想执行以下操作,则无法工作:
let i? = 88
print("The value of i is: \(i ?? "nil")") // Compiler error
答案 4 :(得分:0)
从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
答案 5 :(得分:-1)
初始化
Var text: string? = nil
打印
print("my string", text! as string)
这将避免单词" optional"在字符串之前。