スウィフトプロパティ2024 年の最新の入門チュートリアル。このコースでは ストアのプロパティ,遅延ストレージのプロパティ,変数の例,計算プロパティ,読み取り専用属性の計算,プロパティオブザーバー,グローバルとローカル変数,物件のタイプ,プロパティの型の値を取得および設定, について学習できます。
特定のクラス、構造体、または列挙協会スイフトプロパティの値。
プロパティは、保存性に分け、プロパティを計算することができます。
ストアのプロパティ | 計算プロパティ |
---|---|
一定または可変の記憶部の一例として | 計算された(というよりも保存)の値を |
クラスと構造のため | クラス、構造体、および列挙型の |
保存特性および特性は、一般に、特定の型のインスタンスを計算するために使用されます。
プロパティはまた、このプロパティは、type属性と呼ばれ、型自体で直接使用することができます。
代わりに、カスタム動作をトリガするために、プロパティ値の変化を監視するためのプロパティのオブザーバを定義することができます。 属性の視聴者は、親クラスから継承されたプロパティに追加することができる独自のメモリ属性を記述するために添加することができます。
簡単に言えば、メモリ属性は、特定のクラスまたは内部構造のインスタンスに格納された定数または変数です。
ストレージプロパティは(varキーワードで定義された)変数ストレージ属性をすることができ、それはまた、(キーワードましょうによって定義される)一定のストレージ属性することができます。
定義が格納されているときには、プロパティのデフォルト値を指定することができます
また、設定や建設中のプロパティの格納された値を変更し、さらに一定のストレージプロパティの値を変更することができます
import Cocoa struct Number { var digits: Int let pi = 3.1415 } var n = Number(digits: 12345) n.digits = 67 print("\(n.digits)") print("\(n.pi)")
上記プログラム実行出力は、次のとおりです。
67 3.1415
次のコードを考えてみます。
let pi = 3.1415
符号PIは、(π= 3.1415)、そのように関係なく、あなたが構造をインスタンス化し、それが変更されないときに定義属性に格納されているデフォルト値を指定します。
あなたが一定の保存性を定義する場合は、次のように変更しようとすると、それは文句を言います。
import Cocoa struct Number { var digits: Int let numbers = 3.1415 } var n = Number(digits: 12345) n.digits = 67 print("\(n.digits)") print("\(n.numbers)") n.numbers = 8.7
次のように上記のプログラムの実行エラーは、エラーは次のとおりです。
error: cannot assign to property: 'numbers' is a 'let' constant n.numbers = 8.7
「数字」を意味する定数であり、あなたはそれを変更することはできません。
遅延メモリ属性は、プロパティが初期値が計算されますと呼ばれる最初の時間を指します。
遅延・ストア・プロパティを示すために怠惰な属性宣言を使用する前に。
注意:
遅延ストレージのプロパティは、(使用して変数として宣言されなければならないvar
プロパティの値は、インスタンスコンストラクタの前に完了しない可能性があるため、キーワードを)。 建設前の一定のプロパティは初期値を持っている必要があり、完全であるため、遅延プロパティとして宣言することはできません。
遅延ストレージのプロパティは、一般的に使用されます。
オブジェクトの作成を遅らせます。
プロパティの値は、他の未知のクラスに依存している場合
import Cocoa class sample { lazy var no = number() // `var` 关键字是必须的 } class number { var name = "w3big Swift 教程" } var firstsample = sample() print(firstsample.no.name)
上記プログラム実行出力は、次のとおりです。
w3big Swift 教程
あなたはObjective-Cの経験を持っていた場合は、Objective-Cのクラスのインスタンスストレージ値と基準は、2つのメソッドを提供知っている必要があります。 性質のため、また、プロパティの値を格納するために、バックエンド・インスタンス変数として使用することができます。
迅速なプログラミング言語は、統一性を達成するために、これらの理論を使用します。 スウィフトは、バックエンド・ストレージ・プロパティに直接アクセスすることはできません、該当するインスタンス変数を属性ありません。 これは、異なるシナリオの下でアクセス方法の問題を回避するだけでなく、文としてプロパティの定義を簡略化します。
名前、タイプ、およびメモリ管理機能を含む - - プロパティの型のすべての情報はすべてのユニークな場所で(型定義)の定義。
ストレージ属性、種類、構造、および列挙に加えて、属性は、直接格納されていない計算されたプロパティ値を計算するために 、他の特性または間接的な変数の値を設定するオプションのセッターの値を取得するためのゲッターを提供するように定義することができます。
import Cocoa class sample { var no1 = 0.0, no2 = 0.0 var length = 300.0, breadth = 150.0 var middle: (Double, Double) { get{ return (length / 2, breadth / 2) } set(axis){ no1 = axis.0 - (length / 2) no2 = axis.1 - (breadth / 2) } } } var result = sample() print(result.middle) result.middle = (0.0, 10.0) print(result.no1) print(result.no2)
上記プログラム実行出力は、次のとおりです。
(150.0, 75.0) -150.0 -65.0
パラメータ名を定義していない計算されたプロパティのセッターが新しい値を表している場合は、デフォルトの名前NEWVALUEを使用することができます。
唯一のプロパティのセッターは、読み取り専用属性の計算で計算されていないゲッター。
読み取り専用プロパティは常にポイントを介してアクセスするために(。)演算子、計算値を返しますが、新しい値を設定することはできません。
import Cocoa class film { var head = "" var duration = 0.0 var metaInfo: [String:String] { return [ "head": self.head, "duration":"\(self.duration)" ] } } var movie = film() movie.head = "Swift 属性" movie.duration = 3.09 print(movie.metaInfo["head"]!) print(movie.metaInfo["duration"]!)
上記プログラム実行出力は、次のとおりです。
Swift 属性 3.09
注意:
あなたが使用しなければならない
var
その値が固定されていないため、読み取り専用の属性計算を含む計算された属性を定義するためのキーワードを。let
キーワードが初期値の後に変更することはできません一定の属性を宣言するためにのみ使用されます。
各プロパティを監視し、プロパティの値に対応するための変更属性ビューアは、プロパティの値が観察するために呼び出されますときに設定、さらには新しい値と同じ時間の現在の値も例外ではありません。
また、属性の方法をオーバーライドすることにより、(ストレージおよびコンピューティングプロパティ属性を含む)継承されたプロパティの属性オブザーバを追加することができます保存性以外の属性遅延メモリに加えて、視聴者にプロパティを追加することができます。
注意:
あなたが直接セッター値を監視し、変化に対応することができますので、あなたは、プロパティの計算のためにオーバーロードすることはできませんプロパティオブザーバを追加する必要はありません。
あなたは、1またはプロパティのために、次の観察者のすべてを追加することができます。
willSet
新しい価値コールを設定する前に didSet
新しい値が即座に呼び出すように設定された後 import Cocoa class Samplepgm { var counter: Int = 0{ willSet(newTotal){ print("计数器: \(newTotal)") } didSet{ if counter > oldValue { print("新增数 \(counter - oldValue)") } } } } let NewCounter = Samplepgm() NewCounter.counter = 100 NewCounter.counter = 800
上記プログラム実行出力は、次のとおりです。
计数器: 100 新增数 100 计数器: 800 新增数 700
記載の計算モード属性と観察者は、グローバルおよびローカル変数に使用することができます。
ローカル変数 | グローバル変数 |
---|---|
関数、メソッド、または内部クロージャ内の変数を定義しました。 | 機能、方法、または閉鎖定義の任意のタイプの外部変数。 |
値を格納し、検索するため。 | 値を格納し、検索するため。 |
値を取得し、設定する保存性。 | 値を取得し、設定する保存性。 |
また、特性を計算するために使用されます。 | また、特性を計算するために使用されます。 |
type属性は、({})内部の最も外側の中括弧を書くのタイプで型の一部として定義されています。
クラス型の属性を定義するには、type属性値の型を定義するために、静的なキーワード、classキーワードを使用します。
struct Structname { static var storedTypeProperty = " " static var computedTypeProperty: Int { // 这里返回一个 Int 值 } } enum Enumname { static var storedTypeProperty = " " static var computedTypeProperty: Int { // 这里返回一个 Int 值 } } class Classname { class var computedTypeProperty: Int { // 这里返回一个 Int 值 } }
注意:
type属性の計算例は、読み取り専用であるが、あなたはまた、インスタンス属性で計算読み書き可能なタイプの属性構文同様の計算を定義することができます。
類似の特性の例は、プロパティへのアクセスのタイプは、ドット演算子により行われます(。)。 しかし、プロパティの型ではなく一例としてよりも、を介して取得し、型自体を設定することです。 例としては、次のとおりです:
import Cocoa struct StudMarks { static let markCount = 97 static var totalCount = 0 var InternalMarks: Int = 0 { didSet { if InternalMarks > StudMarks.markCount { InternalMarks = StudMarks.markCount } if InternalMarks > StudMarks.totalCount { StudMarks.totalCount = InternalMarks } } } } var stud1Mark1 = StudMarks() var stud1Mark2 = StudMarks() stud1Mark1.InternalMarks = 98 print(stud1Mark1.InternalMarks) stud1Mark2.InternalMarks = 87 print(stud1Mark2.InternalMarks)
上記プログラム実行出力は、次のとおりです。
97 87