swift 3 - ios: преобразовать любой объект в строку

Как мы могли преобразовать любой объект в строку в Swift 3, в старой версии это очень просто с помощью.

var str = toString(AnyObject)

Я пробовал String(AnyObject), но вывод всегда необязателен, даже если я уверен, что AnyObject не является необязательным значением.


person Anthony Shahine    schedule 14.10.2016    source источник


Ответы (5)


Компилятор предлагает заменить код на:

let s = String(describing: str)

Еще один вариант доступен, если у вас есть ситуация, когда вы хотите молча завершить работу с пустой строкой, а не сохранять что-то, что изначально может не быть строкой, как строку.

let s =  str as? String ?? ""

иначе у вас есть способы определить и выдать ошибку в ответах выше/ниже.

person sketchyTech    schedule 14.10.2016

Вот три варианта для вас:

Вариант 1 - если пустить

if let b = a as? String {
    print(b) // Was a string
} else {
    print("Error") // Was not a string
}

Вариант 2 - охрана пусть

guard let b = a as? String
else {
    print("Error") // Was not a string
    return // needs a return or break here
}
print(b) // Was a string

Вариант 3 - пусть с ?? (нулевой оператор объединения)

let b = a as? String ?? ""
print(b) // Print a blank string if a was not a string
person Ben    schedule 14.10.2016

Вот простая функция (repl.it), которая преобразует любое значение в строку, где nil становится пустым нить. Я нашел его полезным для работы с JSON, который непоследовательно использует null, пробел, числа и числовые строки для идентификаторов.

import Foundation

func toString(_ value: Any?) -> String {
  return String(describing: value ?? "")
}

let d: NSDictionary = [
    "i" : 42,
    "s" : "Hello, World!"
]

dump(toString(d["i"]))
dump(toString(d["s"]))
dump(toString(d["x"]))

Отпечатки:

- "42"
- "Hello, World!"
- ""
person Trevor Robinson    schedule 07.09.2019

Пытаться

let a = "Test" as AnyObject
guard let b = a as? String else { // Something went wrong handle it here }
print(b) // Test
person Rashwan L    schedule 14.10.2016

попробуй это -

var str:AnyObject?
str = "Hello, playground" as AnyObject?
if let value = str
{
   var a = value as! String
}

OR

var a = str as? String
person Anupam Mishra    schedule 14.10.2016
comment
Вы должны убедиться, что AnyObject имеет значение, если вы используете as!, иначе произойдет сбой. - person Rashwan L; 14.10.2016