@财产/ @综合等价于swift
我们曾经声明property
在类之间传递数据如下:
.h file (interface file) @property (nonatomic) double topSpeed; .m file (implementation file) @synthesize topSpeed;
现在没有interface
类,如何在.swift
类之间传递数据?
Swift不提供属性和实例variables(即属性的底层存储)之间的区别。 要定义一个属性,只需在类的上下文中声明一个variables即可。
一个Swift类只是一个ClassName.swift文件。
你声明一个类和属性为
class SomeClass { var topSpeed: Double var aStrProperty: String var anIntProperty: Int //Initializers and other functions }
您可以通过点符号访问属性值。 从Xcode6 beta 4开始,在Swift中也有访问修饰符( public
, internal
和private
)。 默认情况下每个属性是internal
。 在这里看到更多的信息。
有关更多信息,请参阅Swift编程指南 :
存储的属性和实例variables
如果您有使用Objective-C的经验,您可能知道它提供了两种方法将值和引用存储为类实例的一部分。 除了属性之外,还可以使用实例variables作为存储在属性中的值的后备存储。
Swift将这些概念统一成一个属性声明。 一个Swift属性没有相应的实例variables,并且不直接访问属性的后备存储。 这种方法避免了在不同情况下如何访问价值的混淆,并简化了财产的声明成为一个单一的,明确的声明。 所有有关该属性的信息(包括其名称,types和内存pipe理特性)都在单个位置中定义为该types定义的一部分。
使用属性。
从Swift编程指南 :
存储的属性和实例variables
如果您有使用Objective-C的经验,您可能会知道它提供了两种方法将值和引用存储为类实例的一部分。 除了属性之外,还可以使用实例variables作为存储在属性中的值的后备存储。
Swift将这些概念统一成一个属性声明。 一个Swift属性没有相应的实例variables,并且不直接访问属性的后备存储。 这种方法避免了在不同情况下如何访问价值的混淆,并简化了财产的声明成为一个单一的,明确的声明。 所有有关该属性的信息(包括其名称,types和内存pipe理特性)都在单个位置中定义为该types定义的一部分。
Objective-C中的属性对应于Swift中的属性。 在Objective-C和Swift中有两种实现属性的方法:
- 目标C中的合成/自动合成属性 – 在Swift中被称为“存储属性”。 你只需用
var topSpeed : Double
来声明它,或者在类声明中使用let topSpeed : Double = 4.2
,就像在函数体中声明局部variables一样。 您不必指定支持实例variables的名称,因为在Swift中当前没有实例variables。 您必须始终使用该属性而不是其支持的实例variables。 - 在Objective-C中手动实现的属性 – 在Swift中被称为“计算属性”。 你可以在类声明中声明
var topSpeed : Double { get { getter code here } set { setter code here } }
(用于readwrite
属性)或者var topSpeed : Double { getter code here }
(用于readonly
属性)。
这听起来像你的问题的至less一部分涉及到给其他类传递一个给定类的接口。 像Java(而不像C,C ++和Objective-C),Swift不会将接口从实现中分离出来。 如果您想使用在其他位置定义的符号,则不要import
头文件。 相反,您需要import
一个模块 ,如:
import Foundation import MyClass
要访问另一个类中的属性,请导入该类。
存储的属性和实例variables
如果您有使用Objective-C的经验,您可能会知道它提供了两种方法将值和引用存储为类实例的一部分。 除了属性之外,还可以使用实例variables作为存储在属性中的值的后备存储。
Swift将这些概念统一成一个属性声明。 一个Swift属性没有相应的实例variables,并且不直接访问属性的后备存储。 这种方法避免了在不同情况下如何访问价值的混淆,并简化了财产的声明成为一个单一的,明确的声明。 所有有关该属性的信息(包括其名称,types和内存pipe理特性)都在单个位置中定义为该types定义的一部分。
从Swift编程书:
struct FixedLengthRange { var firstValue: Int let length: Int } var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)