How to print a string from plist without “Optional”?

前端 未结 6 1778
遥遥无期
遥遥无期 2020-12-10 01:46

I load a value from a dictionary in a plist but when I print it to the console, it prints: Optional(Monday Title) rather than just \"Monday Title\".

How can I get ri

相关标签:
6条回答
  • 2020-12-10 02:29

    initialize

    Var text: string? = nil
    

    Printing

    print("my string", text! as string)
    

    This will avoid word "optional" before the string.

    0 讨论(0)
  • 2020-12-10 02:31

    With some try, I think this way is better.

    (variableName ?? "default value")!
    

    Use ?? for default value and then use ! for unwrap optional variable.

    Here is example,

    var a:String? = nil
    var b:String? = "Hello"
    
    print("varA = \( (a ?? "variable A is nil.")! )")
    print("varB = \( (b ?? "variable B is nil.")! )")
    

    It will print

    varA = variable A is nil.
    varB = Hello
    
    0 讨论(0)
  • 2020-12-10 02:33

    Swift 3.1

    From Swift 3, you can use String(describing:) to print out optional value. But the syntax is quite suck and the result isn't easy to see in console log.

    So that I create a extension of Optional to make a consistent nil value.

    extension Optional {
        var logable: Any {
            switch self {
            case .none:
                return "⁉️" // Change you whatever you want
            case let .some(value):
                return value
            }
        }
    }
    

    How to use:

    var a, b: Int?
    a = nil
    b = 1000
    print("a: ", a.logable)
    print("b: ", b.logable)
    

    Result:

    a: ⁉️
    b: 1000
    
    0 讨论(0)
  • 2020-12-10 02:34

    Another, slightly more compact, way (clearly debatable, but it's at least a single liner)

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

    In theory result["ip"] ?? "unavailable" should have work too, but it doesn't, unless in 2.2

    Of course, replace "unavailable" with whatever suits you: "nil", "not found" etc

    0 讨论(0)
  • 2020-12-10 02:38

    I'm not sure what the proper process is for linking to other answers, but my answer to a similar question applies here as well.

    Valentin's answer works well enough for optionals of type String?, but won't work if you want to do something like:

    let i? = 88
    print("The value of i is: \(i ?? "nil")")  // Compiler error
    
    0 讨论(0)
  • 2020-12-10 02:43

    One way to get rid of the Optional is to use an exclamation point:

    println(todayTitle!)
    

    However, you should do it only if you are certain that the value is there. Another way is to unwrap and use a conditional, like this:

    if let theTitle = todayTitle {
        println(theTitle)
    }
    

    Paste this program into runswiftlang for a demo:

    let todayTitle : String? = "today"
    println(todayTitle)
    println(todayTitle!)
    if let theTitle = todayTitle {
        println(theTitle)
    }
    
    0 讨论(0)
提交回复
热议问题