2016-11-08 3 views
0

Swift 2(おそらく2.3)から3.0へ移動し、次のコードを修正するのに苦労します: 今、Stringもうコレクションではありません。この特定のコードを修正するにはどうすればよいですか?"String"の値にはメンバーのインデックスはありません - Swift 3.0へ移動

let separator = anyWord.indexOf("-")! 

anyWord.substring(with: (anyWord.indices.suffix(from: anyWord.index(anyWord.startIndex, offsetBy: separator + 1)))) 

答えて

2

@dfri's first solutionの改善点として、upperBoundStringrange(of:)メソッド(これはNSStringから橋渡しされています)は、文字列の(最初に出現した)ダッシュの後にインデックスを付けます。

import Foundation 

let anyWord = "foo-bar" 

if let separator = anyWord.range(of: "-")?.upperBound { 
    let bar = anyWord.substring(from: separator) 
    print(bar) // bar 
} 

あるいは固め狂気単一の結合にOptional使用:文字列もはや収集されていないのmap(_:)方法の問題の一般解は、そのノートが

if let bar = (anyWord.range(of: "-")?.upperBound).map(anyWord.substring(from:)) { 
    print(bar) // bar 
} 

を 『』にあります代わりにstring.charactersを使用してください。 a Collectionです。

+1

'Range'の' upperBound'をきれいに使います! – dfri

2

私はあなたが達成したいものになどやや不確かなんだけど、あなたが好きなようで、例えばのために指定されたセパレータの後ろに部分文字列を作成するための文字列foo-barbarが与えられている。foo-bar

これは実装しようとしている方法よりも複雑ではありません。

など。 Stringcomponents(separatedBy: "-")方法を使用して、他の代替として、

let anyWord = "foo-bar" 

if let chars = anyWord.characters 
    .split(separator: Character("-"), maxSplits: 1) 
    .dropFirst(1).last { 
    let bar = String(chars) 
    print(bar) // bar 
} 

または:

let anyWord = "foo-bar" 

if let separator = anyWord.characters.index(of: "-") { 
    let subStartIndex = anyWord.characters.index(after: separator) 
    let bar = anyWord[subStartIndex..<anyWord.endIndex] 
    print(bar) // bar 
} 

あるいは、別の代替として、.characters(コレクション)に適用Collectionsplit(separator:maxSplits:omittingEmptySubsequences:)方法を使用

import Foundation 

let anyWord = "foo-bar" 

let bar = anyWord.components(separatedBy: "-").dropFirst(1).reduce("", +) 
print(bar) // bar 
+0

第1の選択肢としてのみ私に合っています。anyWord [anyWord.characters.index(after:separator).. user2976267

関連する問題