2014-11-07 3 views
0

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

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 внутри тела метода?

ответ

4

Вы всегда можете вызывать функцию 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) 
+0

Бинго! :-) Благодаря. – cfischer

+0

Вы просто избили меня в публикации, но да, это правильно. Используйте пространство имён 'Swift' для однозначного доступа к стандартной библиотеке Swift. – nickgraef