предупреждение: 'символы' является устаревшим: пожалуйста, используйте строку или подстроку напрямую


символы - свойство экземпляра String, устарело с помощью Xcode 9.1

Это было очень полезно получить подстроку из строки с помощью characters свойство но теперь оно устарело и Xcode предлагает использовать substring. Я попытался проверить так Вопросы и Apple developer tutorials / guidelines для того же самого. Но не видел никакого решения / альтернативы, как было предложено.

вот предупреждение:

'символы' является устаревшим: пожалуйста, используйте строку или подстроку

у меня так много строковых операций выполняются / обрабатываются с помощью свойства characters.

у кого-нибудь есть идеи/информация об этом обновлении?

6 126

6 ответов:

Swift 4 внес изменения в string API.
вы можете просто использовать !stringValue.isEmpty вместо stringValue.characters.count > 0

для получения дополнительной информации вы получаете образец от здесь

для электронной.г

let edit = "Summary"
edit.count   // 7

Swift 4 vs Swift 3 примеры:

let myString = "test"

for char in myString.characters {print(char) } // Swift 3
for char in myString { print(char) } // Swift 4

let length = myString.characters.count // Swift 3
let length = myString.count // Swift 4

один из наиболее распространенных случаев манипулирования строками-это ответы JSON. В этом примере я создал расширение в своем приложении watch, чтобы удалить последние (n) символы объекта Bitcoin JSON.

Swift 3:

func dropLast(_ n: Int = 0) -> String {
    return String(characters.dropLast(n))

Сообщение Об Ошибке Xcode 9.1:

'символы' является устаревшим: пожалуйста, используйте строку или подстроку непосредственно

в Xcode говорит нам использовать строковую переменную или метод напрямую.

Swift 4:

func dropLast(_ n: Int = 0) -> String {
    return String(dropLast(n))
    }

Полное Наращивание:

extension String {
    func dropLast(_ n: Int = 0) -> String {
        return String(dropLast(n))
    }

    var dropLast: String {
        return dropLast()
    }
}

звоните:

print("rate:\(response.USDRate)")
let literalMarketPrice = response.USDRate.dropLast(2)
print("literal market price: \(literalMarketPrice)")

:

//rate:7,101.0888 //JSON float
//literal market price: 7,101.08 // JSON string literal

дополнительные Примеры:

  • print("Spell has \(invisibleSpellName.count) characters.")
  • return String(dropLast(n))
  • return String(removeLast(n))

документы:

вы часто будете использовать общие методы, такие как dropLast() или removeLast() или count Итак, вот явная документация Apple для каждого метода.

droplast()

removelast()

подсчет персонажи

Это предупреждение - всего лишь вершина айсберга, было много изменений строк, строки снова представляют собой набор символов, но мы получили soemthing новые и классные, подстроки:)

Это здорово читать об этом: https://useyourloaf.com/blog/updating-strings-for-swift-4/

использовать characters, потому что String перестал быть коллекцией в Swift 2.0. Однако это все еще действительный код в Swift 4, но теперь он больше не нужен, что String это Collection еще раз.

например Swift 4 String теперь имеет прямое свойство count, которое дает количество символов:

// Swift 4
let spString = "Stack"
spString.count           // 5

примеры для строки и подстроки.

строка

Swift 4 String теперь непосредственно получить элемент, который дает первый символ строки: (string.characters.first)

let spString = "Stack"
let firstElement = spString.first   //S

подстрока

С помощью подстроки получить первый символ.

let spstring = "Welcome"
let indexStartOfText = spstring.index(spstring.startIndex, offsetBy: 1)
let sub = spstring.substring(to: indexStartOfText)
print(sub) //W

вы также можете использовать этот код для группировки словарей без использования { $0.письмена.во-первых! }.

let cities = ["Shanghai": 24_256_800, "Karachi": 23_500_000, "Beijing": 21_516_000, "Seoul": 9_995_000]
let groupedCities = Dictionary(grouping: cities.keys) { .first! }
print(groupedCities)