警告: '文字'は廃止されました:文字列または部分文字列を直接使用してください


162

文字 -文字列のインスタンス・プロパティは、とから廃止されましたXcodeの9.1

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

ここに警告メッセージがあります:

'文字'は廃止されました:文字列または部分文字列を使用してください

ここに画像の説明を入力してください

propertyを使用して多くの文字列操作が実行/処理されましたcharacters

誰もがこの更新について何かアイデア/情報を持っていますか?


5
Swift 3から4への変更に関する興味深い記事を以下に示します。SE0163Stringも読んでください
vadian

5
count代わりに使用してみてください。
holex 2017年

1
string.characters.forEach新しいAPI を使用していた場合string.forEach { char in process(char) }
Efren

回答:


270

Swift 4では文字列APIに変更が加えられました。 代わりに
使用できます!stringValue.isEmptystringValue.characters.count > 0

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

例えば

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

回答ありがとうございます。しかし、サブ文字列の詳細なリファレンスを入手できますか。これは単なるサンプルの例であり、他の多くの操作で文字を処理しています
Krunal

1
詳細はこちらからご確認ください。developer.apple.com/library/content/documentation/Swift/...
songxunzhao

挨拶=「こんにちは、世界!」インデックス= Greeting.index(of: "、")??
Greeting.endIndex let begin

1
Substringのオンラインリファレンス。
Dennis Vennink 2017

32
count> 0を使用して、コレクションが空かどうかを確認しないでください。コレクションにはisEmptyというプロパティがあります。ドキュメントからコレクションが空かどうかを確認する必要がある場合は、countプロパティがゼロであることを確認する代わりにisEmptyプロパティを使用します。RandomAccessCollectionに準拠していないコレクションの場合、countプロパティにアクセスすると、コレクションの要素が繰り返されます。
レオダバス2017

82

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

2
これは受け入れられる答えになるはずです。問題は、string.characters.countの置き換えについてであり、ゼロと比較するための置き換えではありません。それはスクリーンショットでのみ言及されています。
Timothy Kanski、

9

文字列を操作する最も一般的なケースの1つは、JSON応答です。この例では、ビットコインJSONオブジェクトの最後の(n)文字をドロップする拡張機能を時計アプリに作成しました。

スウィフト3:

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

Xcode 9.1エラーメッセージ:

'文字'は廃止されました:文字列または部分文字列を直接使用してください

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ので、ここでは各メソッドの明示的なアップルのドキュメントです。

droplast()

removelast()

文字を数える



2

Swift 2.0ではコレクションでなくなったcharactersためString、これを使用してください。ただし、これはSwift 4でも引き続き有効なコードですStringが、今ではもう必要ありませんCollection

たとえば、Swift 4にStringは、文字数を指定する直接カウントプロパティがあります。

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

文字列とサブ文字列の例。

ストリング

Swift 4 Stringは、Stringの最初の文字を与えるElementを直接取得します。(string.characters.first)

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

サブストリング

SubStringを使用して最初の文字を取得します。

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

文字列の最初の文字を取得したいので、let firstElement = spString.firstまたはSubstringのどちらの方法を使用する必要があるかを知りたいですか?
プルキット2018

1
@Pulkit .first文字列が""空の場合に使用することをお勧めします。nilのみを返しsubstringますが、エラーが発生します。
Pranavan Sp 2018

このコード行をスウィフト4に変換する方法 'AuthorImageText = String(val.characters [(AuthorName.startIndex)])。capitalized'
Pulkit

@Pulkitは.characters十分に削除
Pranavan Sp

0

このコードは、{$ 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

文字を削除するだけです。例:

stringValue.characters.countからstringValue.count

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.