gpt4 book ai didi

ios - 为什么我的 Swift 中的正则表达式无法编译?我该如何给它一个可变字符串呢?

转载 作者:搜寻专家 更新时间:2023-11-01 06:10:22 25 4
gpt4 key购买 nike

当我使用以下代码去除 URL 开头的 http://www. 时,出现错误。

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' is not a subtype of 'NSMutableString'

我该如何解决这个问题?我做错了什么?

最佳答案

您可以通过简单地使用 NSMutableString(string: ...) 构造它来使 stringy 成为 NSMutableString。不过,您还必须做一些其他事情才能使您的代码正常工作:

  1. 您不能为选项传递 nil。如果你不想传递任何选项,正确的值是 NSMatchingOptions.allZeros
  2. 在 Xcode 6.1 GM 中,您用于 NSRegularExpressioninit 方法返回一个 Optional (NSRegularExpression?),因此您将需要使用可选链接来调用 regex?.replaceMatchesInString。 (在 Xcode 6.0.1 中可能不是这种情况;我不确定何时进行了更改)
  3. 因为stringy 现在是一个NSMutableString,你不能在它上面调用countElements()。只需使用 NSString 的 length 属性即可。

完成这些更改后,代码如下所示:

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

关于ios - 为什么我的 Swift 中的正则表达式无法编译?我该如何给它一个可变字符串呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26247788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com