web-dev-qa-db-ja.com

警告: 'characters'は非推奨です:直接StringかSubstringを使ってください

characters - Stringのインスタンスプロパティ。 Xcode 9.1以降では非推奨です

charactersプロパティを使用してStringから部分文字列を取得することは非常に便利でしたが、現在は推奨されなくなり、Xcodeはsubstringを使用することを推奨しています。私はSOの質問とAppleの開発者向けチュートリアル/ガイドラインをチェックしようとしました。しかし提案されているように解決策/代替案を見ることができませんでした。

これが警告メッセージです。

'characters'は推奨されません:文字列または部分文字列を使用してください

enter image description here

私は非常に多くの文字列操作がプロパティcharactersを使って実行/処理されています。

このアップデートについて何かアイデアや情報がありますか?

142
Krunal

Swift 4では、文字列APIに変更が加えられました。
!stringValue.isEmptyの代わりにstringValue.characters.count > 0を使うことができます

詳細については、 here からサンプルを入手してください。

例えば

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

Swift 4と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

文字列を操作するための最も一般的なケースの1つはJSONレスポンスです。この例では、Bitcoin JSONオブジェクトの最後の(n)文字を削除するための拡張機能を自分のwatchアプリに作成しました。

スイフト3:

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

Xcode 9.1エラーメッセージ:

'characters'は推奨されていません:直接StringかSubstringを使ってください

Xcodeは、文字列変数またはメソッド直接を使用するように指示しています。

スイフト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()

文字数を数える

8
tem

この警告は氷山の一角にすぎません。文字列の変更がたくさんあり、文字列も文字の集まりですが、新しくてクールなものがたくさんあります。subStrings :)

これはこれについての素晴らしい読みです: https://useyourloaf.com/blog/updating-strings-for-Swift-4/ /

2
Boris

charactersはSwift 2.0ではコレクションではなくなったため、このStringを使用してください。しかし、これはSwift 4ではまだ有効なコードですが、Stringが再びCollectionであるため、現在は不要です。

たとえば、Swift 4のStringは文字数を指定するdirect countプロパティを持ちます。

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

StringおよびSubStringの例.

ひも

Swift 4 StringはStringの最初の文字を与えるElementを直接得るようになりました: (string.characters.first)

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

SubString

SubStringを使うと最初の文字が得られます。

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

{$ 0.characters.first!を使わずに辞書のグループ化にこのコードを使うこともできます。 }.

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