Подтвердить что ты не робот

Как конвертировать Swift Bool? → String?

Учитывая Bool?, я хотел бы иметь возможность сделать это:

let a = BoolToString(optbool) ?? "<None>"

который либо дал бы мне "true", "false", либо "<None>".

Есть ли встроенный для BoolToString?

4b9b3361

Ответ 1

let b1: Bool? = true
let b2: Bool? = false
let b3: Bool? = nil

print(b1?.description ?? "none") // "true"
print(b2?.description ?? "none") // "false"
print(b3?.description ?? "none") // "none"

или вы можете определить "один лайнер", который работает как с Bool, так и с Bool? как функцию

func BoolToString(b: Bool?)->String { return b?.description ?? "<None>"}

Ответ 2

Строка (Bool) - самый простой способ.

var myBool = true
var boolAsString = String(myBool)

Ответ 3

Вы можете использовать тернарный оператор ?::

let a = optBool == nil ? "<None>" : "\(optBool!)"

Или вы можете использовать map:

let a = optBool.map { "\($0)" } ?? "<None>"

Из двух, optBool.map { "\($0)" } делает именно то, что вам нужно BoolToString; он возвращает String?, который равен Optional(true), Optional(false) или nil. Тогда оператор nil-coalescing ?? разворачивает или заменяет nil на "<None>".

Update:

Это также можно записать как:

let a = optBool.map(String.init) ?? "<None>"

или

let a = optBool.map { String($0) } ?? "<None>"

Ответ 4

var boolValue: Bool? = nil
var stringValue = "\(boolValue)" // can be either "true", "false", or "nil"

Или более подробная пользовательская функция:

func boolToString(value: Bool?) -> String {
    if let value = value {
        return "\(value)"
    }
    else { 
        return "<None>"
        // or you may return nil here. The return type would have to be String? in that case.
    }

}

Ответ 5

let someString = String(true) //"true"
let trueBool = Bool("true")   //true
let falseBool = Bool("false") //false
let nilBool = Bool("foo")     //nil