Как напечатать строку из 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)

Это позволит избежать слова "необязательно" перед строкой.