2015-09-19 1 views
-1

Я просматриваю строку пути SVG и использую NSScanner, чтобы попытаться разбить ее на ее компоненты. Когда он работает, хотя я получаю компоненты, но я не получаю обратно «тип»Swift NSScanner не возвращает символ начала

Например: «м 186.14021,456.15955 3.19716,8.75681 с 1,78393»

Если вернуться: «м 186.14021,456.15955 3.19716,8.75681"

Фактический результат: "186.14021,456.15955 3.19716,8.75681"

Любые идеи, где мой код будет наперекосяк?

import UIKit 

let whitespaceAndPunctuationSet = NSMutableCharacterSet.whitespaceAndNewlineCharacterSet() 
whitespaceAndPunctuationSet.formUnionWithCharacterSet(NSCharacterSet.punctuationCharacterSet()) 


var str = "m 186.14021,456.15955 3.19716,8.75681 c 1.78393,0.93528 30.33822,25.2032 27.48643,47.35972 -4.11654,31.98273 -39.24645,39.28157 -59.94003,28.99354 -20.69358,-10.28804 -17.12572,-56.58417 -14.98501,-58.45472 2.14072,-1.87055 24.97501,-80.4337 44.24145,-26.65535 z" 
let characterSet = NSCharacterSet(charactersInString: "mlhvcsqtaz") 
let aScanner = NSScanner(string: str) 
aScanner.charactersToBeSkipped = whitespaceAndPunctuationSet 

while aScanner.atEnd == false 
{ 
    var testString:NSString? 

    aScanner.scanUpToCharactersFromSet(characterSet, intoString: &testString) 

    aScanner.scanCharactersFromSet(characterSet, intoString: nil) 

    print(testString) 
} 
+0

У тебя другая проблема, не так ли? Может ли NSScanner включить 123-456 в 123 и -456? –

+0

Почему вы не используете существующий парсер? Во всяком случае, почему вы не используете 'scanCharactersFromSet' сначала, чтобы получить контрольный символ, а затем используя' scanUpToCharactersFromSet', чтобы получить очки – Wain

ответ

0

Хорошо, это похоже на работу:

import UIKit 

let whitespaceAndPunctuationSet = NSMutableCharacterSet.whitespaceAndNewlineCharacterSet() 
whitespaceAndPunctuationSet.formUnionWithCharacterSet(NSCharacterSet.punctuationCharacterSet()) 


var str = "m 186.14021,456.15955 3.19716,8.75681 c 1.78393,0.93528 30.33822,25.2032 27.48643,47.35972 -4.11654,31.98273 -39.24645,39.28157 -59.94003,28.99354 -20.69358,-10.28804 -17.12572,-56.58417 -14.98501,-58.45472 2.14072,-1.87055 24.97501,-80.4337 44.24145,-26.65535 z" 
let characterSet = NSCharacterSet(charactersInString: "mlhvcsqtaz") 
let aScanner = NSScanner(string: str) 
aScanner.charactersToBeSkipped = whitespaceAndPunctuationSet 

while aScanner.atEnd == false 
{ 
    var testString:NSString? 
    var controlChar:NSString? 

    aScanner.scanCharactersFromSet(characterSet, intoString: &controlChar) 

    aScanner.scanUpToCharactersFromSet(characterSet, intoString: &testString) 

    print(controlChar) 
    print(testString) 
}