2015-05-14 2 views

ответ

5

Нравится. Если это метод класса:

class Car { 
    class func upgrade() -> Self { 
     return self() 
    } 
} 

Если это метод экземпляра:

class Car { 
    func upgrade() -> Self { 
     return self.dynamicType() 
    } 
} 

Тип возвращаемого Self означает «класс меня, полиморфно». Поэтому мы возвращаем автомобиль, если это автомобиль и гоночный автомобиль, если это RacingCar. Обозначения self() и self.dynamicType() являются сокращением для переписки init; это оба класса, так что это законно. Я полагаю, у вас будет более сложный инициализатор. Вам нужно будет сделать свой инициализатор required, чтобы успокоить страхи компилятора (как я объясню here); таким образом, ни одно из указанных выше не будет компилироваться, если только init() не отмечено required в автомобиле.

+0

И посмотрите мою книгу, в которой описывается эта точная ситуация: http: // www. apeth.com/swiftBook/ch04.html#_type_reference – matt

+0

Ничего себе, очень приятно! – hakonbogen

Смежные вопросы