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