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の醜さを隠すことができます:substringFromIndexsubstringToIndex
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が原因ではありません。これは、キャラクターが複数の複合コードポイントで構成されている可能性があるためです。