39

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

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

.m file (implementation file)
@synthesize topSpeed;

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

4

6 回答 6

56

Swift 没有区分属性和实例变量(即属性的底层存储)。要定义一个属性,您只需在类的上下文中声明一个变量。

一个 swift 类只是一个 ClassName.swift 文件。

您将一个类和属性声明为

class SomeClass {

  var topSpeed: Double
  var aStrProperty: String
  var anIntProperty: Int

  //Initializers and other functions

}

您可以通过点符号访问属性值。从 Xcode6 beta 4 开始,Swift 中也有访问修饰符(public,internalprivate)。默认情况下,每个属性都是internal. 请参阅此处了解更多信息。

有关更多信息,请参阅Swift 编程指南

存储的属性和实例变量

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

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

于 2014-06-03T12:13:02.140 回答
13

使用属性。

来自Swift 编程指南

存储的属性和实例变量

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

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

于 2014-06-03T12:12:12.073 回答
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属性)。
于 2014-06-10T09:15:57.523 回答
1

听起来您的问题至少有一部分与将给定类的接口与其他类通信有关。与 Java 一样(与 C、C++ 和 Objective-C 不同),Swift 不会将接口与实现分开。import如果要使用在其他地方定义的符号,则不需要头文件。相反,您import是一个模块,例如:

import Foundation
import MyClass

要访问另一个类中的属性,请导入该类。

于 2014-06-03T12:29:48.730 回答
0

存储的属性和实例变量

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

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

来自 Swift Programming Book:

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

    var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
于 2014-07-23T21:45:55.127 回答
0

我说 : typealias在 swift for@synthesize

看看这个链接:https ://docs.swift.org/swift-book/ReferenceManual/Declarations.html

在此处输入图像描述

于 2018-09-16T03:56:50.260 回答