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