Пространства имен в Swift

Я пишу расширение для String вернуть обратную версию:

extension String{

    func rev()->String{
        var r = ""
        r.extend(reverse(self))
        return r
    }
}

Код работает нормально, но я бы хотел вызвать этот метод reverse, и не rev, Если я это сделаю, я получу ошибку, так как имя метода конфликтует с универсальной функцией reverse:

extension String{

    func reverse()->String{
        var r = ""
        r.extend(reverse(self)) // this is where I get the error
        return r
    }
}

Есть ли способ указать, что я имею в виду обобщенную функцию reverse внутри тела метода?

1 ответ

Решение

Вы всегда можете вызвать функцию Swift явно, добавив имя модуля, например Swift.reverse():

extension String{

    func reverse()->String{
        var r = ""
        r.extend(Swift.reverse(self))
        return r
    }
}

Обратите внимание, что вы можете немного упростить функцию

func reverse()->String{
    return String(Swift.reverse(self))
}

Это работает, потому что Swift.reverse() возвращает массив, Array соответствуетSequenceType, а также String имеет конструктор

init<S : SequenceType where Character == Character>(_ characters: S)
Другие вопросы по тегам