2015-09-30 5 views
1

Итак, у меня есть протокол, и в нем я хочу переменную типа класса. Таким образом, я могу инициализировать этот класс из переменной.Переменная типа в протоколе - Swift 2

Имейте в виду, что будет много разных классов. Я сделал быстрый пример.

Я получаю ошибку «тип„CashRegister“не соответствует протоколу„RegisterProtocol“»

Этот пример не совсем то, что я делаю, но он получает через точку. Спасибо за помощь.

protocol RegisterProtocol { 
    var currentBill: DollarBillProtocol {get set} 
    func makeNewBill()->DollarBillProtocol 
} 

extension RegisterProtocol { 
    func printCurrentBill() { 
     Swift.print(currentBill) 
    } 
} 

class CashRegister: RegisterProtocol { 

    var currentBill = OneDollarBill.self 

    func makeNewBill() -> DollarBillProtocol { 
     return currentBill.init() 
    } 
} 



protocol DollarBillProtocol { 
    // protocol that all bills have in common 
} 


class OneDollarBill: DollarBillProtocol { 
    required init(){ 
    } 
} 

class FiveDollarBill: DollarBillProtocol { 
    required init(){ 
    } 

} 

ответ

0

Как вы объявить currentBill в CashRegister делает его вар типа class. Но для протокола RegisterProtocol эта переменная имеет тип DollarBillProtocol в любом классе, который реализует протокол. Ошибка компиляции из-за этого несоответствия.

Чтобы сделать это более ясным, вы могли бы объявить вар с явным типа следующим образом:

class CashRegister: RegisterProtocol { 

    var currentBill: DollarBillProtocol = OneDollarBill() // or other initial value 
} 
+0

я его в классе CashRegister ... Я не хочу, сильная ссылка на объект , Я хочу ссылку на тип. – JoeBayLD

+0

Извините. но это не отвечает на вопрос. Я знаю, что это сработает, но это не то, что я хочу. Я не хочу инициализировать объект для переменной. Я просто хочу сохранить тип. Затем позже запустите его. Посмотрите на вызов makeNewBill. – JoeBayLD

+0

Я хочу тип класса var. Как это сделать с протоколом? – JoeBayLD

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