在@ 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中还有访问修饰符(publicinternalprivate)。默认情况下,每个属性都是internalSee here了解更多信息。

有关更多信息,请参阅Swift Programming Guide

存储的属性和实例变量

如果您有使用Objective-C的经验,您可能知道它提供了两种方法来存储值和引用作为类实例的一部分。除了属性之外,还可以使用实例变量作为存储在属性中的值的后备存储。

Swift将这些概念统一到一个属性声明中。 Swift属性没有相应的实例变量,并且不直接访问属性的后备存储。这种方法避免了在不同的上下文中如何访问值的混淆,并将属性的声明简化为单个明确的语句。有关属性的所有信息(包括其名称,类型和内存管理特征)都在单个位置定义,作为类型定义的一部分。

另一答案

使用属性。

来自Swift Programming Guide

存储的属性和实例变量

如果您有使用Objective-C的经验,您可能知道它提供了两种方法来存储值和引用作为类实例的一部分。除了属性之外,还可以使用实例变量作为存储在属性中的值的后备存储。

Swift将这些概念统一到一个属性声明中。 Swift属性没有相应的实例变量,并且不直接访问属性的后备存储。这种方法避免了在不同的上下文中如何访问值的混淆,并将属性的声明简化为单个明确的语句。有关属性的所有信息(包括其名称,类型和内存管理特征)都在单个位置定义,作为类型定义的一部分。

另一答案

Objective-C中的属性对应于Swift中的属性。在Objective-C和Swift中有两种实现属性的方法:

  1. 目标C中的合成/自动合成属性 - 这些属性在Swift中称为“存储属性”。您只需在类声明中使用var topSpeed : Doublelet topSpeed : Double = 4.2声明它,就像在函数体中声明局部变量一样。您无法指定支持实例变量的名称,因为Swift中当前没有实例变量。您必须始终使用该属性而不是其支持实例变量。
  2. 在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

enter image description here

以上是关于在@ swift中@ property / @ synthesize等效的主要内容,如果未能解决你的问题,请参考以下文章

Swift中属性Properties

Swift-属性(Properties)

关于swift中的构造函数

将值从 Objective-C 类传递给 Swift TableViewCell

Swift:KeyPath

Swift:KeyPath