2017-06-01 125 views
0

我有一個OrderBook與預期和完成的訂單;兩者都是Ints數組。Swift - 函數參數必須符合協議和檢查是kindOf

我想要一個'添加'順序功能,它是通用的,適用於預期類和完成類;

兩個類都遵循一個協議。

我希望進行函數調用,其中傳入的對象必須符合協議;不僅如此,我想檢查的訂單是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) 

在我迅速的操場上,add()函數,當我檢查,看看它是否是一個ExistingOrder或CompletedOrder

我如何做一個函數,其中的參數必須符合協議始終返回false ;然後檢查通過參數傳入的對象是否屬於某種類型?

非常感謝

+1

難道不該'順序是ExistingOrder'(不'.Type') ? – rmaddy

+1

從'is'檢查中移除'.Type' – dan

+0

儘管因爲您需要使用鑄造對象將其添加到數組中,您應該可以執行'if let order = order as?反正現在的訂單 – dan

回答

0

的答案是使用order is ExistingOrder,計入@rmaddy然後檢查返回if let order = order as? ExistingOrder,計入@丹

相關問題