美文网首页
iOS 中协议中可以定义属性及定义属性的方式方法

iOS 中协议中可以定义属性及定义属性的方式方法

作者: 傻傻小萝卜 | 来源:发表于2018-04-10 15:40 被阅读489次

iOS中协议中和分类中是可以用@property形式声明属性的,只不过在协议、分类中声明的属性,只有对应的setter/getter方法,并没有生成对应的成员变量。因为协议中只可以声明方法,分类中只能声明方法和对应的实现。

Protocol

@protocol MyProtocol

@property (nonatomic, strong)NSString *protocolName;

@end

@interface ViewController :UIViewController

@end

如果一个类遵守这个协议的话,在该类中即可调用出self.protocolName,但是如果直接调用self.protocolName = @"就是个这个鬼";

self.protocolName = @"这是个什么鬼啊";

NSLog(@"%@",self.protocolName);

项目会直接出现崩溃

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ViewController setProtocolName:]: unrecognized selector sent to instance 0x7f9fb350aa20'

实现方法1:

这是由于在协议当中的属性只有只有对应的setter/getter,但是没有成员变量,如果直接直接将其get方法写出如下:

- (NSString*)protocolName

{

    return @"这个是个什么鬼";

}

这样调用的话,就能够直接调用

 NSLog(@"%@",self.protocolName);

输出结果为:

2018-04-10 15:30:36.373180+0800 链式编程[36622:228189] 这个是个什么鬼

实现方法2:

@interface ViewController ()

@end

@implementation ViewController

@synthesize protocolName =_protocolName;

 上面方法中主要用到了@synthesize上面声明部分的 @synthesize protocolName =_protocolName; 意思是说,protocolName 属性为 _protocolName 成员变量合成访问器方法。 也就是说,protocolName属性生成存取方法是setprotocolName,这个setprotocolName方法就是_protocolName变量的存取方法,它操作的就是_protocolName这个变量。通过这个看似是赋值的这样一个操作,我们可以在@synthesize 中定义与变量名不相同的getter和setter的命名,籍此来保护变量不会被不恰当的访问

 self.protocolName = @"这是个什么鬼啊";

    NSLog(@"%@",self.protocolName);

输出结果:

2018-04-10 15:30:36.373180+0800 链式编程[36622:228189] 这个是个什么鬼

相关文章

  • iOS协议详解,协议中定义属性

    协议中定义属性 可参考文章iOS开发 - protocol中定义属性

  • iOS 中协议中可以定义属性及定义属性的方式方法

    iOS中协议中和分类中是可以用@property形式声明属性的,只不过在协议、分类中声明的属性,只有对应的sett...

  • 使用协议的注意项

    协议中定义的属性 1.协议中定义的只读属性,在实现协议的类型中既可以定义为只读的计算属性,也可以根据需要设置为可读...

  • iOS 协议中定义属性

    在Protocol或者Category中是不可以添加属性,但是还是看到这样写的代码。 完整的属性包括成员变量和se...

  • iOS 协议中定义属性

    协议中是可以定义属性的,但是只有对应的getter和setter方法 但是没有对应的成员变量 而getter和se...

  • Swift学习之协议一

    协议可以用来定义方法、属性、下标的声明,协议可以被枚举、结构体、类遵守 一、属性 1、协议中定义属性时必须用var...

  • 协议

    协议 协议可以用来定义方法、属性、下标的声明,协议可以被枚举、结构体、类遵守(多个协议之间用逗号隔开) 协议中定义...

  • swift协议

    协议 协议可以用来定义方法、属性、下标的声明,协议可以被枚举、结构体、类遵守(多个协议之间用逗号隔开) 协议中定义...

  • Swift5.x入门14--协议,Any,as,元类型,Erro

    协议可以用来定义方法,下标,属性的声明; 协议可以被类,结构体,枚举遵守,多个协议之间用逗号隔开; 协议中定义方法...

  • Swift面向协议编程-Alamofire网络请求

    面向协议 先看代码: 代码中定义名为Run协议,包含一个name属性,以及一个run方法的定义 所谓协议,就是属性...

网友评论

      本文标题:iOS 中协议中可以定义属性及定义属性的方式方法

      本文链接:https://www.haomeiwen.com/subject/ercnhftx.html