Xcode 协议中的类型变量-Swift 2

Xcode 协议中的类型变量-Swift 2,xcode,protocols,swift2,Xcode,Protocols,Swift2,所以我有一个协议,其中我想要一个类类型的变量。这样我就可以从变量初始化这个类 记住,将会有很多不同的课程。我举了一个简单的例子 我收到错误“类型‘收银机’不符合协议‘RegisterProtocol’” 这个例子并不完全是我正在做的,但它让我明白了重点。谢谢你的帮助 protocol RegisterProtocol { var currentBill: DollarBillProtocol {get set} func makeNewBill()->DollarBillP

所以我有一个协议,其中我想要一个类类型的变量。这样我就可以从变量初始化这个类

记住,将会有很多不同的课程。我举了一个简单的例子

我收到错误“类型‘收银机’不符合协议‘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(){
    }

}

您在
收银机中声明
currentBill
的方式使其成为
class
类型的var。但是协议
RegisterProtocol
要求在实现协议的任何类中该变量的类型为
DollarBillProtocol
。编译错误是因为这种不匹配

为了更清楚地说明这一点,您可以使用显式类型声明var,如下所示:

class CashRegister: RegisterProtocol {

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

您在
收银机中声明
currentBill
的方式使其成为
class
类型的var。但是协议
RegisterProtocol
要求在实现协议的任何类中该变量的类型为
DollarBillProtocol
。编译错误是因为这种不匹配

为了更清楚地说明这一点,您可以使用显式类型声明var,如下所示:

class CashRegister: RegisterProtocol {

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

我在收银机课上有。。。我不想要对某个对象的强引用。我想要一个该类型的引用。对不起。但这并不能回答问题。我知道这会奏效,但这不是我想要的。我不想初始化变量的对象。我只想存储类型。然后稍后初始化它。看看makeNewBill调用。我想要一个类类型var。如何使它与协议一起工作?在这种情况下,您必须确保OneDollarBill.type符合DollarBillProtocol。但你认为这是可能的吗?一点也不…我在收银机课上有。。。我不想要对某个对象的强引用。我想要一个该类型的引用。对不起。但这并不能回答问题。我知道这会奏效,但这不是我想要的。我不想初始化变量的对象。我只想存储类型。然后稍后初始化它。看看makeNewBill调用。我想要一个类类型var。如何使它与协议一起工作?在这种情况下,您必须确保OneDollarBill.type符合DollarBillProtocol。但你认为这是可能的吗?一点也不。。。