신속한 방법


Swift 메소드는 특정 유형과 연관된 함수입니다.

Objective-C에서 클래스는 메소드를 정의할 수 있는 유일한 유형입니다. 하지만 Swift에서는 클래스/구조체/열거형 정의 여부를 선택할 수 있을 뿐만 아니라 생성하는 유형(클래스/구조체/열거형)에 대한 메서드를 유연하게 정의할 수도 있습니다.


인스턴스 메서드

Swift 언어에서 인스턴스 메서드는 특정 클래스, 구조 또는 열거형 유형의 인스턴스에 속하는 메서드입니다.

인스턴스 메서드는 다음과 같은 메서드를 제공합니다.

  • 인스턴스 속성에 접근하고 수정할 수 있습니다.

  • 인스턴스의 목적과 관련된 기능을 제공합니다.

인스턴스 메서드는 다음 중괄호({}) 안에 작성해야 합니다. 그 사이에 속하는 유형입니다.

인스턴스 메서드는 해당 유형의 다른 모든 인스턴스 메서드와 속성에 암시적으로 액세스할 수 있습니다.

인스턴스 메서드는 자신이 속한 클래스의 특정 인스턴스에서만 호출할 수 있습니다.

인스턴스 메서드는 기존 인스턴스와 독립적으로 호출할 수 없습니다.

Syntax

func funcname(Parameters) -> returntype
{
    Statement1
    Statement2
    ……
    Statement N
    return parameters
}

Instances

import Cocoa

class Counter {
    var count = 0
    func increment() {
        count++
    }
    func incrementBy(amount: Int) {
        count += amount
    }
    func reset() {
        count = 0
    }
}
// 初始计数值是0
let counter = Counter()

// 计数值现在是1
counter.increment()

// 计数值现在是6
counter.incrementBy(5)
print(counter.count)

// 计数值现在是0
counter.reset()
print(counter.count)

위 프로그램의 실행 출력은 다음과 같습니다.

6
0

Counter 클래스는 세 가지 인스턴스 메서드를 정의합니다.

  • increment는 카운터를 1씩 증가시킵니다. increment让计数器按一递增;

  • incrementBy(amount: Int)让计数器按一个指定的整数值递增;

  • reset将计数器重置为0。

Counter这个类还声明了一个可变属性count

incrementBy(amount: Int)지정된 정수 값만큼 카운터를 증가시킵니다.

reset카운터를 0으로 재설정합니다.

Counter이 클래스는 현재 카운터 값을 추적하는 데 사용되는 변경 가능한 속성 count도 선언합니다.

메서드의 로컬 매개변수 이름과 외부 매개변수 이름

Swift 함수 매개변수는 로컬 이름(함수 본문 내에서 사용됨)과 외부 이름(함수 호출 시 사용됨)을 모두 가질 수 있습니다.

Swift 및 Objective-C의 메서드 Swift의 메소드는 Objective-C와 마찬가지로 일반적으로 메소드의 첫 번째 매개변수를 가리키는 전치사를 사용합니다(예: with, for, by 등).

Swift의 기본값은 다음과 같습니다. 메소드의 첫 번째 매개변수 이름은 기본적으로 하나이며, 두 번째 이후 매개변수 이름은 전역 매개변수 이름으로 지정됩니다.


다음 예에서는 'no1'이 로컬 매개변수 이름으로 선언됩니다.

import Cocoa

class division {
    var count: Int = 0
    func incrementBy(no1: Int, no2: Int) {
        count = no1 / no2
        print(count)
    }
}

let counter = division()
counter.incrementBy(1800, no2: 3)
counter.incrementBy(1600, no2: 5)
counter.incrementBy(11000, no2: 3)

위 프로그램 실행의 출력 결과는 다음과 같습니다.

600
320
3666

외부 이름 설정 제공 여부

첫 번째 매개변수에 외부 이름을 강제로 추가하고 이 로컬 이름을 다음과 같이 사용합니다. 외부 이름(Swift 2.0 이전) # 기호 사용

반대로, 외부 이름을 제공하지 않고 밑줄(_)을 사용하여 두 번째 및 후속 매개변수를 설정할 수도 있습니다.

import Cocoa

class multiplication {
    var count: Int = 0
    func incrementBy(first no1: Int, no2: Int) {
        count = no1 * no2
        print(count)
    }
}

let counter = multiplication()
counter.incrementBy(first: 800, no2: 3)
counter.incrementBy(first: 100, no2: 5)
counter.incrementBy(first: 15000, no2: 3)

self 속성

.

각 유형의 인스턴스에는 self라는 암시적 속성이 있으며 이는 인스턴스 자체와 완전히 동일합니다. 🎜🎜이 암시적 self 속성을 인스턴스 메서드에서 사용하여 현재 인스턴스를 참조할 수 있습니다. 🎜위의 프로그램 실행 결과는 다음과 같습니다. 🎜
2400
500
45000

인스턴스 메소드의 값 유형 수정

Swift 언어의 구조와 열거형은 값 유형입니다. 일반적으로 값 형식의 속성은 해당 인스턴스 메서드 내에서 수정할 수 없습니다.

그러나 특정 메서드에서 구조나 열거형의 속성을 수정해야 하는 경우 메서드를 변경하도록 선택할 수 있습니다. 그러면 메서드가 메서드 내에서 해당 속성을 변경할 수 있으며 변경 사항은 그대로 유지됩니다. 메서드가 끝나면 원래 구조로 유지됩니다.

메서드는 암시적 self 속성에 새 인스턴스를 할당할 수도 있습니다. 이 새 인스턴스는 메서드가 끝난 후 원래 인스턴스를 대체합니다.

import Cocoa

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("Self 内: \(res)")
    }
    
    func tot(c: Int) -> Int {
        return res - c
    }
    
    func result() {
        print("结果为: \(tot(20))")
        print("结果为: \(tot(50))")
    }
}

let pri = calculations(a: 600, b: 300)
let sum = calculations(a: 1200, b: 300)

pri.result()
sum.result()

위 프로그램의 실행 출력은 다음과 같습니다.

Self 内: 900
Self 内: 1500
结果为: 880
结果为: 850
结果为: 1480
结果为: 1450

변수 메서드에서 self에 값 할당

가변 메서드는 암시적 속성 self에 새 인스턴스를 할당할 수 있습니다.

import Cocoa

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(3)
val.scaleBy(30)
val.scaleBy(300)

위 프로그램의 실행 결과는 다음과 같습니다.

9
15
270
450
81000
135000

Type 메소드

인스턴스 메소드는 유형 자체에서 호출되는 메소드를 정의할 수도 있습니다. 유형 방법.

구조체와 열거형의 유형 메소드를 선언하고 메소드의 func 키워드 앞에 static 키워드를 추가하세요. 클래스는 클래스라는 키워드를 사용하여 하위 클래스가 상위 클래스의 구현 메서드를 재정의할 수 있도록 할 수 있습니다.

Type 메서드는 인스턴스 메서드와 마찬가지로 점(.) 구문으로 호출됩니다.

import Cocoa

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(13)

위 프로그램 실행의 출력 결과는 다음과 같습니다.

39
65