泛型是支撐 Swift 能夠實現 Protocol-oriented Programming 的基礎,Objective-C 在如此的功能是可以支援的。
Photo by @glenncarstenspeters on Unsplash
在 Day 15 的時候,我們討論過如何使用 Objective-C type。
//Objective-C
@interface OCBox1 <__contravariant ObjectType> : NSObject
- (_Nullable ObjectType) some;
@end
@interface OCBox2 <__covariant ObjectType> : NSObject
- (_Nullable ObjectType) some;
@end
我沒有理解 covariant 與 contravariant 在 Swift interface 有什麼區別。
在 Swift 我們可以使用 where
限制泛型的約束
// Swift
class Box<T> where T: Comparable {
}
然而 Objective-C 目前是沒有提供這樣的語法。我們能做的,只有透過 extension 實作。
// swift
/* OCBox+Compareable */
extension OCBox:Comparable where ObjectType: Comparable {
}