Swift - 参数必须符合协议且检查的函数是kindOf

时间:2017-06-01 18:05:53

标签: swift function parameters swift-protocols

我订购了预订和已完成的订单;两者都是Ints阵列。

我希望有一个'add'命令函数,它是通用的,适用于期望的和已完成的类;

这两个课程都遵循协议。

我希望进行函数调用,传入的对象必须符合协议;不仅我想检查订单是kindOf类。

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()函数总是返回false

如何创建参数必须符合协议的函数;然后检查通过参数传入的对象是否属于某种类型?

非常感谢

1 个答案:

答案 0 :(得分:0)

答案是使用order is ExistingOrder,记入@rmaddy然后检查返回if let order = order as? ExistingOrder,记入@dan