快速了解所有属性
首先,让我谈谈property
。 假设如果我们需要使用您的类的对象来更改或访问您的类中的iVar,则应该为该iVar分配getter和setter方法。 主要在其他对象需要更改或访问对象中的ivars时使用属性,而无需手动定义getter和setter或使用@property(在目标– c中)。
在Objective-c中, @property
property在类标头中声明一个属性。 这是一个例子:
@property (nonatomic, retain) NSString *myString;
@synthesize为属性(访问器方法)创建setter和getter。 如果不进行synthesize
,则必须编写自己的setter
和getter
实现,例如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
是在创建新范围时初始化的,此后不能更改,因为它是常量属性。