如何在没有“可选”的情况下从 plist 打印字符串?

Posted

技术标签:

【中文标题】如何在没有“可选”的情况下从 plist 打印字符串?【英文标题】:How to print a string from plist without "Optional"? 【发布时间】:2014-10-28 03:01:38 【问题描述】:

我从 plist 中的字典中加载一个值,但是当我将其打印到控制台时,它会打印:Optional(Monday Title) 而不仅仅是“Monday Title”。

打印时如何去掉我的值的 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)
        
        

【问题讨论】:

试试这个 pod github.com/T-Pham/NoOptionalInterpolation。它正是这样做的。 【参考方案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)

【讨论】:

太棒了!非常感谢您的快速回答。我仍然习惯于这些选项。 @vacawama 感谢您提醒我!看起来 runswiftlang 停止支持在线演示,所以我复制了重新键入的代码并将其粘贴到此处,并附有有关如何在线尝试 int 的说明。我还删除了问号。谢谢!【参考方案2】:

经过一番尝试,我认为这种方式更好。

(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

【讨论】:

【参考方案3】:

另一种更紧凑的方式(显然值得商榷,但它至少是一个单线)

(result["ip"] ?? "unavailable").description

理论上result["ip"] ?? "unavailable" 也应该有工作,但它没有,除非在 2.2 中

当然,将“不可用”替换为适合您的内容:“无”、“未找到”等

【讨论】:

聪明!正如@Jeremy 所指出的,您的默认值应该与您的可选值具有相同的类型。所以,如果你想打印一个可选的 Int:var i:Int?; print("i is: \((i ?? 0).description)") // output: "i is 0"【参考方案4】:

我不确定链接到其他答案的正确流程是什么,但my answer to a similar question 也适用于此。

Valentin 的回答对于String? 类型的选项来说效果很好,但如果你想做类似的事情就不行了:

let i? = 88
print("The value of i is: \(i ?? "nil")")  // Compiler error

【讨论】:

【参考方案5】:

斯威夫特 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)

这将避免字符串前的“可选”字样。

【讨论】:

以上是关于如何在没有“可选”的情况下从 plist 打印字符串?的主要内容,如果未能解决你的问题,请参考以下文章

在没有打印预览或打开报表的情况下从 Access 中的表单打印报表?

在没有开发帐户的情况下从 Xcode 部署应用程序

编辑器或在没有 Xcode 的情况下以干净的方式打印 plist 的方法

JSON.NET:如何在没有数组的情况下从DataTable对象中仅序列化一行?

如何在没有 Spark-Shell 的情况下从 AWS 控制台运行 Spark jar 文件

在没有 eval 的情况下从 bash 中的“key1='val1' key2='val2'”字符串中解析变量