Пространства имен в 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)