characters - Stringのインスタンスプロパティ。 Xcode 9.1以降では非推奨です
characters
プロパティを使用してStringから部分文字列を取得することは非常に便利でしたが、現在は推奨されなくなり、Xcodeはsubstring
を使用することを推奨しています。私はSOの質問とAppleの開発者向けチュートリアル/ガイドラインをチェックしようとしました。しかし提案されているように解決策/代替案を見ることができませんでした。
これが警告メッセージです。
'characters'は推奨されません:文字列または部分文字列を使用してください
私は非常に多くの文字列操作がプロパティcharacters
を使って実行/処理されています。
このアップデートについて何かアイデアや情報がありますか?
Swift 4では、文字列APIに変更が加えられました。!stringValue.isEmpty
の代わりにstringValue.characters.count > 0
を使うことができます
詳細については、 here からサンプルを入手してください。
例えば
let edit = "Summary"
edit.count // 7
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の明示的なドキュメントを示します。
この警告は氷山の一角にすぎません。文字列の変更がたくさんあり、文字列も文字の集まりですが、新しくてクールなものがたくさんあります。subStrings :)
これはこれについての素晴らしい読みです: https://useyourloaf.com/blog/updating-strings-for-Swift-4/ /
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
{$ 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)