Не удается преобразовать значение типа 'Range <String.Index>?' к указанному типу 'NSRange' (он же _NSRange ') - PullRequest
0 голосов
/ 08 мая 2018

Я получаю ошибку ниже при изменении кода от 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 голосов
/ 08 мая 2018

Не переводите код 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)"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...