在@ swift中@ property / @ synthesize等效
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在@ swift中@ property / @ synthesize等效相关的知识,希望对你有一定的参考价值。
我们曾经声明property
在类之间传递数据如下:
.h file (interface file)
@property (nonatomic) double topSpeed;
.m file (implementation file)
@synthesize topSpeed;
现在没有interface
类,如何在.swift
类之间传递数据?
Swift不提供属性和实例变量之间的区别(即属性的底层存储)。要定义属性,只需在类的上下文中声明变量即可。
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
。 See here了解更多信息。
有关更多信息,请参阅Swift Programming Guide:
存储的属性和实例变量
如果您有使用Objective-C的经验,您可能知道它提供了两种方法来存储值和引用作为类实例的一部分。除了属性之外,还可以使用实例变量作为存储在属性中的值的后备存储。
Swift将这些概念统一到一个属性声明中。 Swift属性没有相应的实例变量,并且不直接访问属性的后备存储。这种方法避免了在不同的上下文中如何访问值的混淆,并将属性的声明简化为单个明确的语句。有关属性的所有信息(包括其名称,类型和内存管理特征)都在单个位置定义,作为类型定义的一部分。
使用属性。
存储的属性和实例变量
如果您有使用Objective-C的经验,您可能知道它提供了两种方法来存储值和引用作为类实例的一部分。除了属性之外,还可以使用实例变量作为存储在属性中的值的后备存储。
Swift将这些概念统一到一个属性声明中。 Swift属性没有相应的实例变量,并且不直接访问属性的后备存储。这种方法避免了在不同的上下文中如何访问值的混淆,并将属性的声明简化为单个明确的语句。有关属性的所有信息(包括其名称,类型和内存管理特征)都在单个位置定义,作为类型定义的一部分。
Objective-C中的属性对应于Swift中的属性。在Objective-C和Swift中有两种实现属性的方法:
- 目标C中的合成/自动合成属性 - 这些属性在Swift中称为“存储属性”。您只需在类声明中使用
var topSpeed : Double
或let topSpeed : Double = 4.2
声明它,就像在函数体中声明局部变量一样。您无法指定支持实例变量的名称,因为Swift中当前没有实例变量。您必须始终使用该属性而不是其支持实例变量。 - 在Objective-C中手动实现的属性 - 这些属性在Swift中称为“计算属性”。您可以在类声明中声明它们,如
var topSpeed : Double { get { getter code here } set { setter code here } }
(适用于readwrite
属性)或var topSpeed : Double { getter code here }
(适用于readonly
属性)。
听起来至少部分问题涉及将给定类的接口传递给其他类。与Java一样(与C,C ++和Objective-C不同),Swift不会将接口与实现分开。如果你想使用其他地方定义的符号,你不会import
头文件。相反,你import
一个模块,如:
import Foundation
import MyClass
要访问另一个类中的属性,请导入该类。
存储的属性和实例变量
如果您有使用Objective-C的经验,您可能知道它提供了两种方法来存储值和引用作为类实例的一部分。除了属性之外,还可以使用实例变量作为存储在属性中的值的后备存储。
Swift将这些概念统一到一个属性声明中。 Swift属性没有相应的实例变量,并且不直接访问属性的后备存储。这种方法避免了在不同的上下文中如何访问值的混淆,并将属性的声明简化为单个明确的语句。有关属性的所有信息(包括其名称,类型和内存管理特征)都在单个位置定义,作为类型定义的一部分。
来自Swift编程书:
struct FixedLengthRange {
var firstValue: Int
let length: Int
}
var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
我说:typealias
在@synthesize
中的速度更快
看看这个链接:https://docs.swift.org/swift-book/ReferenceManual/Declarations.html
以上是关于在@ swift中@ property / @ synthesize等效的主要内容,如果未能解决你的问题,请参考以下文章