![](/img/trans.png)
[英]Cannot convert value of type 'Range<String.Index>' (aka 'Range<String.CharacterView.Index>') to expected argument type 'NSRange' (aka '_NSRange')
[英]Cannot convert value of type 'Range<String.Index>?' to specified type 'NSRange' (aka '_NSRange')
我从Objective-C到Swift代码更改期间遇到错误。 谢谢
func combinedName() -> String? {
let range: NSRange = name.range(of: brand)
if Int(range.length) > 0 {
return name
}
return "\(brand) \(name)"
}
我的Objective-C代码
- (NSString *)combinedName {
NSRange range = [self.name rangeOfString:self.brand];
if (range.length > 0) return self.name;
return [NSString stringWithFormat:@"%@ %@", self.brand, self.name];
}
不要直接翻译Objective-C代码。 使用常规Swift构造从头开始将其作为Swift代码编写。
func combinedName() -> String {
if name.range(of: brand) != nil {
return name
} else {
return "\(brand) \(name)"
}
}
假设name
和brand
都不是可选的,则返回类型也不应该是可选的,因为在任何情况下都不返回nil
。
您还可以使用?:
使代码更简单:
func combinedName() -> String {
return name.range(of: brand) != nil ? name : "\(brand) \(name)"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.