Swift-メソッド
Swift 4言語では、特定のタイプに関連付けられた関数はメソッドと呼ばれます。Objective Cでは、クラスはメソッドを定義するために使用されますが、Swift 4言語は、クラス、構造、および列挙のメソッドを持つための柔軟性をユーザーに提供します。
インスタンスメソッド
Swift 4言語では、クラス、構造、列挙インスタンスはインスタンスメソッドを介してアクセスされます。
インスタンスメソッドは機能を提供します
- インスタンスのプロパティにアクセスして変更するには
- インスタンスのニーズに関連する機能
インスタンスメソッドは、{}中括弧内に記述できます。タイプインスタンスのメソッドとプロパティに暗黙的にアクセスできます。タイプの特定のインスタンスが呼び出されると、その特定のインスタンスにアクセスできます。
構文
func funcname(Parameters) -> returntype {
Statement1
Statement2
---
Statement N
return parameters
}
例
class calculations {
let a: Int
let b: Int
let res: Int
init(a: Int, b: Int) {
self.a = a
self.b = b
res = a + b
}
func tot(c: Int) -> Int {
return res - c
}
func result() {
print("Result is: \(tot(c: 20))")
print("Result is: \(tot(c: 50))")
}
}
let pri = calculations(a: 600, b: 300)
pri.result()
遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-
Result is: 880
Result is: 850
クラス計算は、2つのインスタンスメソッドを定義します-
- init()は、2つの数値aとbを加算し、それを結果 'res'に格納するように定義されています。
- tot()は、渡された「c」値から「res」を減算するために使用されます
最後に、aとbの値を使用して計算メソッドを出力するためにが呼び出されます。インスタンスメソッドには「。」でアクセスします。ドット構文
ローカルおよび外部パラメータ名
Swift 4関数は、変数のローカル宣言とグローバル宣言の両方を記述します。同様に、Swift 4メソッドの命名規則もObjective Cの命名規則に似ています。ただし、ローカルパラメーター名宣言とグローバルパラメーター名宣言の特性は、関数とメソッドで異なります。Swift 4の最初のパラメーターは、命名規則に簡単にアクセスできるように、前置詞名で「with」、「for」、「by」として参照されます。
Swift 4は、最初のパラメーター名をローカルパラメーター名として宣言し、残りのパラメーター名をグローバルパラメーター名として宣言することにより、メソッドに柔軟性を提供します。ここで、「no1」はSwift4メソッドによってローカルパラメーター名として宣言されています。「no2」はグローバル宣言に使用され、プログラム全体からアクセスされます。
class division {
var count: Int = 0
func incrementBy(no1: Int, no2: Int) {
count = no1 / no2
print(count)
}
}
let counter = division()
counter.incrementBy(no1: 1800, no2: 3)
counter.incrementBy(no1: 1600, no2: 5)
counter.incrementBy(no1: 11000, no2: 3)
遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-
600
320
3666
#および_記号付きの外部パラメータ名
Swift 4メソッドはローカル宣言の最初のパラメーター名を提供しますが、ユーザーはパラメーター名をローカル宣言からグローバル宣言に変更することができます。これは、「#」記号の前に最初のパラメーター名を付けることで実行できます。そうすることで、最初のパラメーターにモジュール全体でグローバルにアクセスできます。
ユーザーが外部名を使用して後続のパラメーター名にアクセスする必要がある場合、メソッド名は「_」記号を使用してオーバーライドされます。
class multiplication {
var count: Int = 0
func incrementBy(no1: Int, no2: Int) {
count = no1 * no2
print(count)
}
}
let counter = multiplication()
counter.incrementBy(no1: 800, no2: 3)
counter.incrementBy(no1: 100, no2: 5)
counter.incrementBy(no1: 15000, no2: 3)
遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-
2400
500
45000
メソッドの自己プロパティ
メソッドには、定義されたすべての型インスタンスに対して「self」と呼ばれる暗黙のプロパティがあります。'Self'プロパティは、定義されたメソッドの現在のインスタンスを参照するために使用されます。
class calculations {
let a: Int
let b: Int
let res: Int
init(a: Int, b: Int) {
self.a = a
self.b = b
res = a + b
print("Inside Self Block: \(res)")
}
func tot(c: Int) -> Int {
return res - c
}
func result() {
print("Result is: \(tot(c: 20))")
print("Result is: \(tot(c: 50))")
}
}
let pri = calculations(a: 600, b: 300)
let sum = calculations(a: 1200, b: 300)
pri.result()
sum.result()
遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-
Inside Self Block: 900
Inside Self Block: 1500
Result is: 880
Result is: 850
Result is: 1480
Result is: 1450
インスタンスメソッドからの値型の変更
Swift 4では、言語の構造と列挙は、インスタンスメソッドで変更できない値型に属しています。ただし、Swift 4言語は、動作を「変更」することで値型を変更する柔軟性を提供します。Mutateはインスタンスメソッドに変更を加え、メソッドの実行後に元のフォームに戻ります。また、「self」プロパティによって、暗黙の関数用に新しいインスタンスが作成され、実行後に既存のメソッドが置き換えられます
struct area {
var length = 1
var breadth = 1
func area() -> Int {
return length * breadth
}
mutating func scaleBy(res: Int) {
length *= res
breadth *= res
print(length)
print(breadth)
}
}
var val = area(length: 3, breadth: 5)
val.scaleBy(res: 3)
val.scaleBy(res: 30)
val.scaleBy(res: 300)
遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-
9
15
270
450
81000
135000
突然変異法の自己特性
'self'プロパティと組み合わせたメソッドの変更により、定義されたメソッドに新しいインスタンスが割り当てられます。
struct area {
var length = 1
var breadth = 1
func area() -> Int {
return length * breadth
}
mutating func scaleBy(res: Int) {
self.length *= res
self.breadth *= res
print(length)
print(breadth)
}
}
var val = area(length: 3, breadth: 5)
val.scaleBy(res: 13)
上記のプログラムをplaygroundを使用して実行すると、次の結果が得られます。−
39
65
タイプメソッド
メソッドの特定のインスタンスが呼び出されると、それはインスタンスメソッドとして呼び出されます。また、メソッドが特定のタイプのメソッドを呼び出す場合、「タイプメソッド」と呼ばれます。「クラス」の型メソッドは「func」キーワードで定義され、構造体と列挙型のメソッドは「func」キーワードの前に「static」キーワードで定義されます。
タイプメソッドは「。」によって呼び出され、アクセスされます。特定のインスタンスを呼び出す代わりに、メソッド全体が呼び出される構文。
class Math {
class func abs(number: Int) -> Int {
if number < 0 {
return (-number)
} else {
return number
}
}
}
struct absno {
static func abs(number: Int) -> Int {
if number < 0 {
return (-number)
} else {
return number
}
}
}
let no = Math.abs(number: -35)
let num = absno.abs(number: -5)
print(no)
print(num)
上記のプログラムをplaygroundを使用して実行すると、次の結果が得られます。−
35
5