Swift - 参数必须符合协议并且检查是 kindOf 的函数
Swift - Function where parameter must conform to protocol and check is kindOf
我有一个包含预期订单和已完成订单的 OrderBook;两者都是整数数组。
我想要一个 'add' 订单函数,它是通用的,适用于预期的和已完成的 class;
两者 class 都遵循一个协议。
我希望进行函数调用,其中传入的对象必须符合协议;不仅我想检查顺序是 kindOf
class.
protocol EntryProtocol {
var value: Int { get set }
}
class OrderBook {
var existingOrders: [ExistingOrder] = [ExistingOrder]()
var completedOrders: [CompletedOrder] = [CompletedOrder]()
func add<C1: Any>(order: C1) where C1: EntryProtocol {
print (order is ExistingOrder.Type) // returns false
print (order is CompletedOrder.Type) // returns false
// i want to do a switch here
}
}
class ExistingOrder: EntryProtocol {
var value : Int
init(value: Int) {
self.value = value
}
// .. other methods
}
class CompletedOrder: EntryProtocol {
var value : Int
init(value: Int) {
self.value = value
}
// .. other methods
}
var orderBook: OrderBook = OrderBook()
let howMany = 4
for _ in 1...howMany {
let value = 3 // this is a random number (1-6)
let order = ExistingOrder.init(value: value)
orderBook.add(order: order)
}
print (orderBook.existingOrders)
print (orderBook.completedOrders)
在我的 swift playground 中,当我检查它是 ExistingOrder 还是 CompletedOrder
时,add() 函数总是 returns false
如何创建参数必须符合协议的函数;然后检查通过参数传入的对象是否是某种类型?
非常感谢
答案是使用order is ExistingOrder
,记入@rmaddy 然后检查return if let order = order as? ExistingOrder
,记入@dan
我有一个包含预期订单和已完成订单的 OrderBook;两者都是整数数组。
我想要一个 'add' 订单函数,它是通用的,适用于预期的和已完成的 class;
两者 class 都遵循一个协议。
我希望进行函数调用,其中传入的对象必须符合协议;不仅我想检查顺序是 kindOf
class.
protocol EntryProtocol {
var value: Int { get set }
}
class OrderBook {
var existingOrders: [ExistingOrder] = [ExistingOrder]()
var completedOrders: [CompletedOrder] = [CompletedOrder]()
func add<C1: Any>(order: C1) where C1: EntryProtocol {
print (order is ExistingOrder.Type) // returns false
print (order is CompletedOrder.Type) // returns false
// i want to do a switch here
}
}
class ExistingOrder: EntryProtocol {
var value : Int
init(value: Int) {
self.value = value
}
// .. other methods
}
class CompletedOrder: EntryProtocol {
var value : Int
init(value: Int) {
self.value = value
}
// .. other methods
}
var orderBook: OrderBook = OrderBook()
let howMany = 4
for _ in 1...howMany {
let value = 3 // this is a random number (1-6)
let order = ExistingOrder.init(value: value)
orderBook.add(order: order)
}
print (orderBook.existingOrders)
print (orderBook.completedOrders)
在我的 swift playground 中,当我检查它是 ExistingOrder 还是 CompletedOrder
时,add() 函数总是 returns false如何创建参数必须符合协议的函数;然后检查通过参数传入的对象是否是某种类型?
非常感谢
答案是使用order is ExistingOrder
,记入@rmaddy 然后检查return if let order = order as? ExistingOrder
,记入@dan