Почему мое регулярное выражение в Swift не компилируется? Как мне дать ему изменяемую строку вместо этого?
Когда я использую следующий код, чтобы лишить http://
а также www.
с начала URL, я получаю сообщение об ошибке.
var error: NSError? = nil
let regex = NSRegularExpression(pattern: "^(http(s)?://)?(www(\\d)?\\.)?", options: nil, error: &error)
var stringy = "http://www.google.com/"
regex.replaceMatchesInString(stringy, options: nil, range: NSMakeRange(0, countElements(stringy)), withTemplate: "")
Ошибка:
"NSString" не является подтипом "NSMutableString"
Как это исправить? Что я делаю неправильно?
2 ответа
Решение
Ты можешь сделать stringy
NSMutableString
просто создав его NSMutableString(string: ...)
, Вам также придется сделать несколько других вещей, чтобы ваш код работал:
- Вы не можете пройти
nil
для вариантов. Если вы не хотите передавать какие-либо параметры, правильное значениеNSMatchingOptions.allZeros
- В Xcode 6.1 GM
init
метод, который вы используете дляNSRegularExpression
возвращает необязательный (NSRegularExpression?
), поэтому вам нужно будет использовать необязательную цепочку для вызоваregex?.replaceMatchesInString
, (Это может быть не так в Xcode 6.0.1; я не уверен, когда это изменение было сделано) - поскольку
stringy
являетсяNSMutableString
Теперь вы не можете позвонитьcountElements()
в теме. Просто используйтеNSString
вместо этого свойство длины.
С этими изменениями код выглядит следующим образом:
var error: NSError? = nil
let regex = NSRegularExpression(pattern: "^(http(s)?://)?(www(\\d)?\\.)?",
options: nil, error: &error)
var stringy = NSMutableString(string: "http://www.google.com")
regex?.replaceMatchesInString(stringy, options: NSMatchingOptions.allZeros,
range: NSMakeRange(0, stringy.length), withTemplate: "")
Потом звоню println(stringy)
после того, как выполнены выводы:
google.com
Дайте мне знать, если это приведет вас туда, куда вы хотите:
let oldString = "http://www.google.com/"
let newString = oldString.stringByReplacingOccurrencesOfString("^(http(s)?://)?(www(\\d)?\\.)?", withString:"" as NSString, options:NSStringCompareOptions.RegularExpressionSearch, range:nil)
println(newString) // google.com/