无法转换'Range <string.index>类型的值?'指定类型'NSRange'(又名'_NSRange')

时间:2018-05-08 04:04:03

标签: ios swift swift4

我在Objective-C到Swift代码更改期间遇到错误。感谢

func combinedName() -> String? {
        let range: NSRange = name.range(of: brand)
        if Int(range.length) > 0 {
            return name
        }
        return "\(brand) \(name)"
    } 

error

我的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];
}

1 个答案:

答案 0 :(得分:2)

不要直接翻译Objective-C代码。使用普通的Swift结构从头开始编写Swift代码。

func combinedName() -> String {
    if name.range(of: brand) != nil {
        return name
    } else {
        return "\(brand) \(name)"
    }
}

假设namebrand都不是可选的,则返回类型不应是可选的,因为在任何情况下都不会返回nil

您还可以使用?:

使代码更简单
func combinedName() -> String {
    return name.range(of: brand) != nil ? name : "\(brand) \(name)"
}