Swift 4のアップデート
Swift 4では再びString
準拠しているCollection
ため、文字列の最初と最後を使用dropFirst
しdropLast
たりトリミングしたりすることが可能です。結果は型Substring
であるため、を返すには、それをString
コンストラクタに渡す必要がありますString
。
let str = "hello"
let result1 = String(str.dropFirst()) // "ello"
let result2 = String(str.dropLast()) // "hell"
dropFirst()
そして、dropLast()
も取るInt
ドロップする文字数を指定するには:
let result3 = String(str.dropLast(3)) // "he"
let result4 = String(str.dropFirst(4)) // "o"
ドロップする文字を文字列より多く指定すると、結果は空の文字列(""
)になります。
let result5 = String(str.dropFirst(10)) // ""
Swift 3のアップデート
最初の文字を削除し、元の文字列を変更したい場合は、@ MickMacCallumの回答を参照してください。プロセスで新しい文字列を作成する場合は、を使用しますsubstring(from:)
。拡張機能ではString
、あなたがの醜さを隠すことができるsubstring(from:)
とsubstring(to:)
の開始と終了をトリミングするために便利な追加を作成するにはString
:
extension String {
func chopPrefix(_ count: Int = 1) -> String {
return substring(from: index(startIndex, offsetBy: count))
}
func chopSuffix(_ count: Int = 1) -> String {
return substring(to: index(endIndex, offsetBy: -count))
}
}
"hello".chopPrefix() // "ello"
"hello".chopPrefix(3) // "lo"
"hello".chopSuffix() // "hell"
"hello".chopSuffix(3) // "he"
同様にdropFirst
してdropLast
彼らの前に、これらの関数は、文字列で使用できる十分な文字が存在しない場合はクラッシュしてしまいます。責任は、それらを適切に使用するために呼び出し側にあります。これは有効な設計決定です。それらを作成して、呼び出し側でラップ解除する必要があるオプションを返すようにすることができます。
Swift 2.x
でああスウィフト2、dropFirst
及びdropLast
(前の最善の解決策は)彼らが前にいたほど便利ではありません。の拡張により、and String
の醜さを隠すことができます:substringFromIndex
substringToIndex
extension String {
func chopPrefix(count: Int = 1) -> String {
return self.substringFromIndex(advance(self.startIndex, count))
}
func chopSuffix(count: Int = 1) -> String {
return self.substringToIndex(advance(self.endIndex, -count))
}
}
"hello".chopPrefix() // "ello"
"hello".chopPrefix(3) // "lo"
"hello".chopSuffix() // "hell"
"hello".chopSuffix(3) // "he"
同様にdropFirst
してdropLast
彼らの前に、これらの関数は、文字列で使用できる十分な文字が存在しない場合はクラッシュしてしまいます。責任は、それらを適切に使用するために呼び出し側にあります。これは有効な設計決定です。それらを作成して、呼び出し側でラップ解除する必要があるオプションを返すようにすることができます。
でスウィフト1.2、あなたが呼び出す必要がありますchopPrefix
。このように:
"hello".chopPrefix(count: 3) // "lo"
または_
、関数定義にアンダースコアを追加して、パラメーター名を抑制できます。
extension String {
func chopPrefix(_ count: Int = 1) -> String {
return self.substringFromIndex(advance(self.startIndex, count))
}
func chopSuffix(_ count: Int = 1) -> String {
return self.substringToIndex(advance(self.endIndex, -count))
}
}
advance
キャストdisplay.text!
することで全体を回避できます。それが良い解決策であると言っているのではありません-考えられる誤解を修正するだけです。NSStringを使用すると、Intでそれにインデックスを付けることができます。-そして、Intでインデックスを作成できないのは、Unicodeが原因ではありません。これは、キャラクターが複数の複合コードポイントで構成されている可能性があるためです。