簡體   English   中英

在@ swift中@ property / @ synthesize等效

[英]@property/@synthesize equivalent in swift

我們曾經聲明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 )。 默認情況下,每個屬性都是internal 有關更多信息, 請參見此處

有關更多信息,請參閱Swift編程指南

存儲的屬性和實例變量

如果您有使用Objective-C的經驗,您可能知道它提供了兩種方法來存儲值和引用作為類實例的一部分。 除了屬性之外,還可以使用實例變量作為存儲在屬性中的值的后備存儲。

Swift將這些概念統一到一個屬性聲明中。 Swift屬性沒有相應的實例變量,並且不直接訪問屬性的后備存儲。 這種方法避免了在不同的上下文中如何訪問值的混淆,並將屬性的聲明簡化為單個明確的語句。 有關屬性的所有信息(包括其名稱,類型和內存管理特征)都在單個位置定義,作為類型定義的一部分。

使用屬性。

Swift編程指南

存儲的屬性和實例變量

如果您有使用Objective-C的經驗,您可能知道它提供了兩種方法來存儲值和引用作為類實例的一部分。 除了屬性之外,還可以使用實例變量作為存儲在屬性中的值的后備存儲。

Swift將這些概念統一到一個屬性聲明中。 Swift屬性沒有相應的實例變量,並且不直接訪問屬性的后備存儲。 這種方法避免了在不同的上下文中如何訪問值的混淆,並將屬性的聲明簡化為單個明確的語句。 有關屬性的所有信息(包括其名稱,類型和內存管理特征)都在單個位置定義,作為類型定義的一部分。

Objective-C中的屬性對應於Swift中的屬性。 在Objective-C和Swift中有兩種實現屬性的方法:

  1. 目標C中的合成/自動合成屬性 - 這些屬性在Swift中稱為“存儲屬性”。 您只需使用var topSpeed : Double或者在類聲明中let 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

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM