繁体   English   中英

无法转换&#39;Range&#39;类型的值 <String.Index> ? 到指定的类型“ NSRange”(又名“ _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)"
    }
}

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

您还可以使用?:使代码更简单:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM