在@ swift中@ property / @ synthesize等效

时间:2014-06-03 12:07:07

标签: ios objective-c swift ios8

我们曾经声明property在类之间传递数据,如下所示:

.h file (interface file)
@property (nonatomic) double topSpeed;

.m file (implementation file)
@synthesize topSpeed;

现在没有interface类,如何在.swift类之间传递数据?

6 个答案:

答案 0 :(得分:53)

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属性没有相应的实例变量,并且   不直接访问属性的后备存储。这个   方法避免了对如何在不同方面访问值的混淆   上下文并将财产的声明简化为单一,   明确的声明。有关该物业的所有信息 - 包括其   名称,类型和内存管理特性 - 在a中定义   单个位置作为类型定义的一部分。

答案 1 :(得分:13)

使用属性。

来自Swift Programming Guide

  

存储的属性和实例变量

     

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

     

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

答案 2 :(得分:3)

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

  1. Objective 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属性)。

答案 3 :(得分:1)

听起来至少部分问题涉及将给定类的接口传递给其他类。与Java一样(与C,C ++和Objective-C不同),Swift不会将接口与实现分开。如果要使用在其他位置定义的符号,则不要import头文件。相反,您import 模块,例如:

import Foundation
import MyClass

要访问其他类中的属性,请导入该类。

答案 4 :(得分:0)

  

存储属性和实例变量

     

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

     

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

来自Swift编程手册:

    struct FixedLengthRange {
    var firstValue: Int
    let length: Int
    }

    var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)

答案 5 :(得分:0)

我说:typealias相当于@synthesize

只需查看以下链接:https://docs.swift.org/swift-book/ReferenceManual/Declarations.html

enter image description here

相关问题