__covariant - 协变性,子类型可以强转到父类型(里氏替换原则) __contravariant - 逆变性,父类型可以强转到子类型(WTF?)

@interface Stack<__contravariant ObjectType> : NSObject

- (void)testExample {
    // This is an example of a functional test case.
    // Use XCTAssert and related functions to verify your tests produce the correct results.
    ContravariantTest<NSString *> *contravariantTestStr;
    ContravariantTest<NSMutableString *> *contravariantTestMulStr;
    contravariantTestStr = contravariantTestMulStr; // 子类强制转化为父类, 这里会报警告 @warining Incompatible pointer types assigning to 'ContravariantTest<NSString *> *' from 'ContravariantTest<NSMutableString *> *'
    contravariantTestMulStr = contravariantTestStr; // 父类强制转化为子类
}

results matching ""

    No results matching ""