快速了解所有属性

首先,让我谈谈property 。 假设如果我们需要使用您的类的对象来更改或访问您的类中的iVar,则应该为该iVar分配getter和setter方法。 主要在其他对象需要更改或访问对象中的ivars时使用属性,而无需手动定义getter和setter或使用@property(在目标– c中)。

在Objective-c中, @property property在类标头中声明一个属性。 这是一个例子:

 @property (nonatomic, retain) NSString *myString; 

@synthesize为属性(访问器方法)创建setter和getter。 如果不进行synthesize ,则必须编写自己的settergetter实现,例如getMyString或setMyString(将属性的第一个字符大写)。

因此,以上属性声明等效于:

- (NSString*)myString {}
- (void)setMyString:(NSString*)newValue {}

属性可以进一步分为存储属性计算属性

存储属性与计算属性

存储的属性将常量和变量值存储为实例的一部分,而计算的属性将计算(而不是存储)值。

►计算的属性由 结构 枚举提供

►存储的属性仅由 结构提供

最简单的形式是,存储的属性是作为特定类或结构的实例的一部分存储的常量或变量。 存储属性可以是变量存储属性 (由var关键字引入)或常量存储属性 (由let关键字引入)。

下面的示例定义了一个称为FixedLengthRange的结构,该结构描述了一个整数范围,该整数范围的长度一旦创建便无法更改:

 struct FixedLengthRange { 
 var firstValue: Int 
 let length: Int 
 } 
 var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3) 
 // the range represents integer values 0, 1, and 2 
 rangeOfThreeItems.firstValue = 6 
 // the range now represents integer values 6, 7, and 8 

FixedLengthRange实例具有一个名为firstValue的变量存储属性和一个名为length的常数存储属性。 在上面的示例中, length是在创建新范围时初始化的,此后不能更改,因为它是常量属性。