Swift では、プロパティはオブジェクトの属性を記述するために使用され、それらはクラス、構造体、列挙型の定数または変数になります。
Swiftのプロパティは、クラス、構造体、列挙型の値を格納するために使用され、プロパティにはゲッターとセッターメソッドがあり、要件に応じてプロパティの値を変更または設定します。
Swiftでプロパティを定義
以下は、Swiftプログラミング言語でプロパティ付きのクラスを作成する簡単な例です。
class UserDetails {
var firstName: String = “”
var lastName: String = “”
}
上記の例では、2 つのプロパティ (firstName, lastName) を持つクラス “UserDetails” を定義しています。
Swift Assign and Access Properties
以下は、クラス内で定義されたプロパティを宣言して値を代入する例です。
class UserDetails {
var firstName: String = “”
var lastName: String = “”
}
var uinfo = UserDetails()
uinfo.firstName = “Suresh”
uinfo.lastName = “Dasari”
print(“Name: \⑭(uinfo.firstName) ⑯(uinfo.lastName)”)
上記の例を見ると、二つのプロパティ “firstName” と “lastName” を定義し、これらの値はクラス “UserDetails” と関連付けられています。
上記のプログラムをswift playgroundで実行すると、以下のような結果が得られます
同じように、swiftプログラミング言語の要件に基づいて、構造体や列挙型のプロパティを定義してアクセスすることができます。
Swiftプログラミング言語で利用できるプロパティには次のような種類があります。
- Stored Properties
- Computed Properties
Swift Stored Properties
SwiftではStored Propertyは定数または変数で、特定のクラスまたは構造のインスタンスの一部として保存されます。 ストアドプロパティは、var
キーワードで変数、let
キーワードで定数を格納するために使用できます。
ストアドプロパティの定義の一部としてデフォルト値を提供することができ、初期化中に初期値を変更することができます。
ここで、ストアドプロパティをクラスで定義する方法と、ストアドプロパティの初期値を初期化中に変更する方法を例として説明します。
以下は、Swiftプログラミング言語のクラスまたは構造体の一部としてストアドプロパティを定義する例です。 String = “Rohini”
let lastName: String
}
var uinfo = UserDetails(firstName: “Suresh”, lastName: ” Dasari”)
print(“Name: \Ȃ(uinfo.firstName)Ȃ(uinfo.lastName)”)
上記の例を見ると、2つのストアドプロパティ (firstName, lastName) を変数 (var
) として、もう1つを初期値を持つ定数 (let
) として定義していることがわかります。
上記のプログラムをswift playgroundで実行すると、以下のような結果が得られます
定数構造インスタンスのストアドプロパティ
swiftでは、ストアドプロパティを持つクラスや構造体を定数として定義することが可能です。 定数変数に割り当てられた値は、アプリケーション全体で同じである必要があるため、初期値で定数プロパティを定義した場合、その値を変更することはできません。
初期化中またはクラスのインスタンスで定数プロパティの値を変更しようとすると、コンパイラーはエラーをスローします。
struct UserDetails {
var firstName.FirstName.FirstName {{5684>
struct userDetails {{5684>
var firstName.FirstName {{5684>
struct userDetails {{5684>
struct userDetails #{5684 String = “Rohini”
let lastName: String
}
var uinfo = UserDetails(firstName: “Suresh”, lastName: ” Dasari”)
uinfo.lastName = “Alavala”
print(“Name.LastName”, “LastName”)
Var uinfo = UserDetails
LastName = “Rohini”
LastName = “Rohini”) \⑭(uinfo.firstName) ⑯(uinfo.lastName)”)
上記の例を見ると、クラスのインスタンス生成時に定数プロパティ “lastName” を定義して、変数に値を代入していることがわかります。
Error: cannot assign to property: ‘lastName’ is a ‘let’ constant
一度、定数プロパティに値を割り当てると、アプリケーション全体で同じでなければならず、さもなければエラーがスローされます。 定数の詳細については、この Swift の定数をチェックしてください。
Swift Lazy Stored Properties
Swift では、lazy stored property は、プロパティ値が最初に使用されるまで初期値が読み込まれないプロパティです。
遅延ストアプロパティは、アプリケーションで使用されるまでプロパティの初期値を読み込む必要がない場合に便利です。 例えば、あるプロパティがあり、その値をロードまたは初期化するために複雑な操作を行う必要がありますが、それは特定の場所でのみ必要であるとします。
では、Swiftアプリケーションで遅延ストアドプロパティを使用する方法を例で見ていきます。
以下は、Swiftプログラミング言語での遅延ストアドプロパティを使用する例です。 String = {
return「チュートレーンへようこそ、♪」
}()
init(name: String) {
self.Name: String {
チュートレーンへようこそ、♪」
チュートレーンへようこそ。name = name
}
let stu = Student(name: “Suresh”)
print(stu.studentInfo)
上記の例では、lazy
キーワードを使ってstudyInfoという遅延保存プロパティを定義していることが分かる。
上記のプログラムをswift playgroundで実行すると、以下のような結果が得られます
これは、私たちの要件に基づいて、swiftプログラミング言語で遅延ストアドプロパティを使用する方法です。
ここで、インスタンスの初期化が完了するまでその値が取得されないため、常に変数として遅延ストアプロパティを宣言する必要があることを覚えておく必要がありますが、定数(let)のプロパティには初期化完了前に値がある必要がありますその理由は、常に変数として遅延プロパティを定義する必要があるということです。
Swift Computed Properties
Swift では、stored プロパティとは異なり、computed プロパティは値を保存せず、ゲッターとセッターを提供し、他のプロパティ値を間接的に取得および設定します。
class Circle {
var radius : Double?
var cval : Double?
var Area.Circle{
ゲッターおよびセッターを使って値を設定する計算プロパティを定義する例です。 Double {
get {
return radius! * radius!
}
set (newArea){
cval = Double(newArea) * 3.14
}
}
let result = Circle()
result.Cval (newArea) {{5684}
get {{5684} {5684} {5684}
print(result.cval)
上記の例を見ると、ゲッターとセッターのプロパティを使用して、プロパティ “Area” に新しい値を設定しています。
上記のプログラムをswift playgroundで実行すると、以下のような結果が得られます。
このように、swiftプログラミング言語では、要件に応じて保存せずに値を使用する計算プロパティを使用することができます。
class Multiplication {
var num1 : Int = 5
var num2 : Int = 5
var multiply.NET
var multiply.NET
class Multiplication
var multiply.NET
Var multiply.NET
var multiply.NET
Ver multiply.NET
get {
return num1 * num2
}
}
let r = Multiplication()
print(r.multiply)
上記の例で我々はデフォルト値で二つの特性をクラスに定義して、ゲッターを使ってこれら二つの数値を掛けている。
上記のプログラムをswift playgroundで実行すると、以下のような結果が得られます。
これは、swiftプログラミング言語でゲッタープロパティを使用して値を設定するための読み取り専用計算プロパティを使用できる方法です。
Swift Property Observer
Swift プロパティオブザーバは、プロパティ値の変化を監視して応答するために使用され、これらのプロパティオブザーバは、プロパティの新しい値がプロパティ現在の値と同じ場合でも、プロパティ値が変わるたびに毎回呼び出すことになります。
- willSet – このオブザーバーは値が保存される直前に呼ばれます。
- didSet – これは新しい値が保存された後に呼ばれるオブザーバーです。
以下は、swiftプログラミング言語でwillSetとdidSetのプロパティを使用する例です。
クラス Changes {
var num1: Int = 10 {
willSet(newvalue) {
print(“Value of \(newvalue)”)
}
didSet {
if num1 > oldValue {
print(“Added \(num1 -)”) oldValue)”)
}
}
}
let result = Changes()
result.num1 = 34
result.num1 = 987
上記の例を見ると、willSet と didSet オブザーバを使用しており、プロパティの値が変更されるたびに、これらのプロパティが呼び出されます。
上記のプログラムをswift playgroundで実行すると、以下のような結果になります。
値34
追加24
値987
追加953
Swift型プロパティ
swiftでは、次のようなプロパティがあります。 インスタンスプロパティはクラスや構造体のインスタンスに関連付けられますが、タイププロパティはタイプそのものに関連付けられ、そのタイプのインスタンスに属するものではありません。
Swiftでは、staticキーワードと計算型プロパティで型プロパティを定義でき、クラス型では
class
キーワードが必要ですが、スーパークラスのメソッドや変数をオーバーライドすることはできません。以下はswiftプログラミング言語での型プロパティの使用例です。
struct typepro {
static let msg = “Welcome to Tutlane”
}
class Class1 {
func test() { print(typepro.Type) {
staticキーワードで型プロパティを定義する。msg) }
}
class Class2 {
func test() { print(typepro.msg) }
}
var ss = Class1()
ss.Class1() { print(typepro.test()
上記の例を見ると、staticキーワードで型プロパティを定義し、名前を参照して型プロパティ値にアクセスし、ドット構文を使用して値にアクセスしています。
Welcome to TutlaneSwift 型プロパティの照会と設定
swiftでは、インスタンスを作成してプロパティに値を割り当てるときと同様に、型プロパティが照会され、ドット(.) 構文で値を設定することができます。
struct typerepo {
static var msg = “Welcome”
}
print(typerepo.X) {
struct typerepo.X}
struct typerepo.X}
struct typerepo.X}
str “型のプロパティーを使用すると、型のインスタンスが取得されずに型のプロパティの値が取得されるようになり、型の値を設定できます。msg)typerepo.msg = “Welcome to Tutlane”
print(typerepo.msg)
上記の例では、typeプロパティを作成し、その型のインスタンスを使用して直接値を設定しています。