#swift
#swift
Вопрос:
Я хочу создать общее расширение, чтобы избежать повторения моего кода для разных типов. вот мой код, который нужно исправить!
extension Bool {
func print() { Swift.print(self.description) }
}
extension Int {
func print() { Swift.print(self.description) }
}
extension String {
func print() { Swift.print(self.description) }
}
extension <T> {
func print() { Swift.print(self.description) }
}
Ответ №1:
Ваше расширение не является «универсальным» в том смысле, что оно может применяться к любому типу. Он может применяться только к типам, которые имеют description
свойство. Ну, какие типы имеют description
свойство? Каждый тип, который соответствует CustomStringConvertible
does!
Итак, вы должны создать расширение CustomStringConvertible
:
extension CustomStringConvertible {
func print() { Swift.print(self.description) }
}
(Обратите внимание, что может существовать тип, который имеет description
свойство, но не соответствует CustomStringConvertible
, но большинство типов в стандартных библиотеках не такие)
Действительно универсальные расширения — это нечто другое, и в настоящее время они предлагаются, т.Е. Пока не являются частью Swift.
Комментарии:
1. У меня здесь небольшой вопрос: если я хочу, чтобы моя пользовательская функция print() работала с пользовательским типом, должен ли я работать над расширением CustomStringConvertible, я думаю?
2. @mimi Вы должны привести свой пользовательский тип в соответствие с
CustomStringConvertible
. напримерclass CustomType: CustomStringConvertible { var description: String { ... } }
3. ага! итак, мой пользовательский тип должен описывать «var description», чтобы соответствовать CustomStringConvertible! Спасибо