2016-10-04 5 views
0

私はこのプログラムを持っていると私は2つの文字列の間の数字を抽出しようとしていますが、私は(下記見せる)私はsubstringWithRange機能Rangeやその他の方法論を使用してSwiftの文字列から部分文字列を抽出する方法は?

コンパイル時エラーを使用する場合、コンパイル時エラーを取得しています:

/Users/chandeln/Documents/ApplePaySwag-Starter/ApplePaySwag/BuySwagViewController.swift:382:47: Cannot convert value of type 'Range<Int>' to expected argument type 'Range<Index>' (aka 'Range<String.CharacterView.Index>') 

コード:

let text = "[DeviceAccountNumber-Start]4817499130007700[DeviceAccountNumber-End]" 

//get the position of the start string 
let danStartTagRange: Range<String.Index> = text.rangeOfString("[DeviceAccountNumber-Start]")! 
let danStartTagIndex: Int = text.startIndex.distanceTo(danStartTagRange.startIndex) 
let danStartTagEndingIndex: Int = text.startIndex.distanceTo(danStartTagRange.endIndex) 
print("danStartTagRange = \(danStartTagRange)") 
print("danStartTagIndex = \(danStartTagIndex)") 
print("danStartTagEndingIndex = \(danStartTagEndingIndex)") 

//get the position of the end string 
let danEndTagRange: Range<String.Index> = text.rangeOfString("[DeviceAccountNumber-End]")! 
let danEndTagIndex: Int = text.startIndex.distanceTo(danEndTagRange.startIndex) 
let danEndTagEndingIndex: Int = text.startIndex.distanceTo(danEndTagRange.endIndex) 
print("danEndTagRange = \(danEndTagRange)") 
print("danEndTagIndex = \(danEndTagIndex)") 
print("danEndTagEndingIndex = \(danEndTagEndingIndex)") 
let rangeOfDan = danStartTagEndingIndex..<danEndTagIndex 

//get the actual dan now based on the above derived variables 
let dan = text.substringWithRange(rangeOfDan) 
let dan = substringFromIndex(danStartTagEndingIndex); 
print("dan = \(dan)") 

以前の実行からの出力:

danStartTagRange = 0..<27 
danStartTagIndex = 0 
danStartTagEndingIndex = 27 
danEndTagRange = 43..<68 
danEndTagIndex = 43 
danEndTagEndingIndex = 68 

私が案内してください

Swift 2.3を使用しています。

+0

その他の方法論は、正規表現です: '」 \\ d + "' – vadian

答えて

2

このようにしてみてください。

Xcodeの8•スウィフト2.3

let text = "[DeviceAccountNumber-Start]4817499130007700[DeviceAccountNumber-End]" 

if let startIndex = text.rangeOfString("[DeviceAccountNumber-Start]")?.endIndex, 
    let endIndex = text.rangeOfString("[DeviceAccountNumber-End]")?.startIndex { 
    let dan = text.substringWithRange(startIndex..<endIndex) 
    print("dan = \(dan)") // "dan = 4817499130007700\n" 
} 

Xcodeの8•スウィフト3

let text = "[DeviceAccountNumber-Start]4817499130007700[DeviceAccountNumber-End]" 

if let lowerBound = text.range(of: "[DeviceAccountNumber-Start]")?.upperBound, 
    let upperBound = text.range(of: "[DeviceAccountNumber-End]")?.lowerBound { 
    let dan = text.substring(with: lowerBound..<upperBound) 
    print("dan = \(dan)") // "dan = 4817499130007700\n" 
} 
関連する問題