1.对于NSSet,NSDictionary和NSArray而言,可以限定存储的数据类型,比如
NSMutableArray<UIView *>* arr = [NSMutableArray array];
这个arr只存储UIview的类型。但是如果存储了非限定的类型,并不会报错,只是会报警告。
UIView * view = arr[0];
view.frame = frame;
arr[0].frame = frame;
就方便了很多。但是如果存储的类型不是限定的类型,比如此处arr[0]存储了一个字符串,而字符串并没有frame。此处就会报错。
除此之外,限定的类型还可以是自己定义的类的类型。比如model
@interface fanxing <objectTe>: NSObject
@property (nonatomic , strong)objectTe Lange;
@end
<>就是泛型的名称,类中如果有某一个属性的类型不确定,需要调用该类的对象来给出,就可以使用这个泛型。使用方法如下
fanxing<ios *> *fan = [[fanxing alloc]init];
fanxing<lange *> *fan2 = [[fanxing alloc]init];
此时对于fan这个对象而言,fan.lange的数据类型就是我自定义的ios类型。fan2对象而言,fan2.lange的数据类型就是我自定义的lange类型。
当然,此时的objectTe是任意类型都可以,nsstring,array等等,有的时候并不可以是所有类型都应该被允许的,比如我这里只希望是一个view以及view的子类类型,不可以是nsstring类型。
@interface fanxing <objectTe:UIView * >: NSObject
@property (nonatomic , strong)objectTe Lange;
-(id)returnlange;
@end
此时的lange只可能是uiview以及uiview的子类。注意的是,这里需要view的指针,而不是uiview, “ * ”不可省略。
3.另外,网上的资料说,__covariant是协变,__contravariant是逆变,协变是是子类可以赋值给父类,即里氏替换原则。而逆变是父类可以赋值给子类,反向的里氏替换。
//逆变
@interface fanxing <__contravariant objectTe:UIView * >: NSObject
@property (nonatomic , strong)objectTe Lange;
@end
//协变
@interface fanxing <__covariant objectTe:UIView * >: NSObject
@property (nonatomic , strong)objectTe Lange;
@end
但是我实际操作的时候,逆变和协变我添加还是不添加,代码结果都是一致的,无论是子类给父类还是父类给子类。而且添加了逆变,父类给子类仍然会给警告。目前我还不知道这玩意到底怎么用,而且__covariant会变色表明是关键字,但__contravariant并不会,仍然和属性是一个颜色,但不会报错。不清楚啥情况
@protocol FanXingViewPro <NSObject>
@required
-(void)mylog;
@optional
-(void)mylog2;
@end
@interface FanXingView : UIView
@property (nonatomic, assign)id<FanXingViewPro> dela;
@end
可选的方法。
@end
注意,1.这里需要有一个属性用来接收delegate的,不然无法回调到签协议的那个类中的方法。
2.还需要再协议声明的类中判断delegate是否是空的和方法有没有被实现,以免找不到方法导致的崩溃。代码如下:
if (self.dela != nil && [self.dela respondsToSelector:@selector(mylog)]) {
[self.dela mylog];
}
//.m文件下
@interface myScrollView()<FanXingViewPro>
然后实现对应的协议方法就可以了。另外,需要delegate给dala(上面提到的),不然不会执行协议。
原文地址:https://blog.csdn.net/qq_36924305/article/details/125854601
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_17829.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!