Сторнирование строки в Swift 4.2 - PullRequest
0 голосов
/ 22 октября 2018

iOS 11, Swift 4.2, Xcode 10

Глядя на SO и, по всей видимости, поиск в Google, все говорят о том, что это должно работать, но это не так.

let str = self.label!.text
let newStr = String(str?.reversed())

Я получаю ошибкусообщение Невозможно вызвать инициализатор для типа 'String' со списком аргументов типа '(ReversedCollection?) ... так как мне вернуть мою строку?

Ответы [ 4 ]

0 голосов
/ 22 октября 2018

Множество вариаций на тему пока здесь, так что вы знаете основной вопрос - str не является обязательным.Мы добавим еще пару (защита и карта бесплатны; -)) ...

Для тех, кто мечтает о C:

let newStr = str == nil ? nil : String(str!.reversed())

Если вы не ожидаете nilи / или хотите вернуть String независимо от того, что вы могли бы использовать:

let newStr = String((str ?? "").reversed())

, что, вероятно, примерно так же мало, как вы можете.

0 голосов
/ 22 октября 2018

Вы должны развернуть переменную str перед установкой newStr:

guard let unwrappedStr = str else { return }
let newStr = String(unwrappedStr.reversed())
0 голосов
/ 22 октября 2018
extension Optional where Wrapped == String {
    func reversed() -> String? {
        guard let str = self else { return nil }
        return String(str.reversed())
    }
}

Использование:

str?.reversed()
0 голосов
/ 22 октября 2018

Вы не можете создать String из необязательной коллекции ReversedCollection.Вам нужно развернуть str.

if let str = self.label?.text {
    let newStr = String(str.reversed())
}
...