我正在尝试翻译这个Objective-C代码:
if ([[self.appStoreCountry stringByReplacingOccurrencesOfString:@"[A-Za-z]{2}" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, 2)] length])
Run Code Online (Sandbox Code Playgroud)
所以我试着编写这段代码:
if !self.appStoreCountry.stringByReplacingOccurrencesOfString("[A-Za-z]{2}", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: Range(start: 0, end: 2)).isEmpty
Run Code Online (Sandbox Code Playgroud)
问题是stringByReplacingOccurrencesOfString部分似乎没有返回字符串.我有来自xcode的错误消息:Cannot convert the expression's type 'Bool' to type 'String'.
我调查了一下并试了一下:
let replaced = self.appStoreCountry.stringByReplacingOccurrencesOfString("[A-Za-z]{2}", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: Range(start: 0, end: 2))
Run Code Online (Sandbox Code Playgroud)
错误消息类似但更奇怪: Cannot convert the expression's type 'String' to type 'String'.
我做错了什么,或者我应该向Apple提交错误?
请记住,Foundation的类型与Swift的类型不同.StringSwift中的A 不是a NSString,而a Range不是NSRange.这确实有效:
let country = self.appStoreCountry // if self.appStoreCountry is an NSString
let country: NSString = self.appStoreCountry // if self.appStoreCountry is a Swift string
let replaced = country.stringByReplacingOccurrencesOfString("[A-Za-z]{2}", withString: "", options: .RegularExpressionSearch, range: NSMakeRange(0, 2))
Run Code Online (Sandbox Code Playgroud)
还要注意简短的符号.RegularExpressionSearch,这使得在Swift中使用枚举更容易一些.