English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Swift 메서드는 특정 타입과 연관된 함수입니다
Objective-C에서는 클래스만 메서드를 정의할 수 있는 유일한 타입입니다. 하지만 Swift에서는 클래스를 정의할지 여부를 선택할 수 있습니다./구조체/열거형, 그리고 생성한 타입(클래스/구조체/열거형에 메서드를 정의합니다.
Swift 언어에서 예제 메서드는 특정 클래스, 구조체 또는 열거형 타입 예제에 속합니다.
예제 메서드는 다음과 같은 메서드를 제공합니다:
예제 속성을 접근하고 수정할 수 있습니다
예제 목적과 관련된 기능을 제공합니다
예제 메서드는 소속 타입의 전후 대括호({}) 사이에 작성되어야 합니다.
예제 메서드는 소속 타입의 모든 다른 예제 메서드와 속성을 암시적으로 접근할 수 있습니다.
예제 메서드는 그 소속 클래스의 특정 예제만이 호출할 수 있습니다.
예제 메서드는 기존 예제에서는 호출할 수 없습니다.
func funcname(매개변수) -> 반환형 { 문장1 문장2 …… 문장 N return 매개변수 }
import Cocoa class Counter { var count = 0 func increment() { count +}} 1 } func incrementBy(amount: Int) { count += amount } func reset() { count = 0 } } // 초기 카운터 값은 0입니다 let counter = Counter() // 카운터 값은 지금1 counter.increment() // 카운터 값은 지금6 counter.incrementBy(amount: 5) print(counter.count) // 카운터 값은 지금 0입니다 counter.reset() print(counter.count)
위 프로그램 실행 출력 결과는 다음과 같습니다:
6 0
Counter 클래스는 세 가지 예제 메서드를 정의합니다:
Counter 이 클래스는 또한 변경 가능한 속성을 선언합니다 count로 현재 카운터 값을 추적할 수 있습니다.
Swift 함수 파라미터는 동시에 로컬 이름(함수 내에서 사용)과 외부 이름(함수 호출 시 사용)을 가질 수 있습니다.
Swift의 메서드와 Objective-C의 메서드는 Objective-C와 마찬가지로, Swift의 메서드 이름은 일반적으로 대명사를 사용하여 첫 번째 파라미터를 가리킵니다. 예를 들어: with, for, by 등.
Swift는 기본적으로 메서드의 첫 번째 파라미터에만 로컬 파라미터 이름을 제공하며, 기본적으로 두 번째와 이후의 파라미터에 전역 파라미터 이름을 제공합니다.
다음 예제에서 '아니요1는 Swift에서는 전역 파라미터 이름으로 선언됩니다.'아니요2는 전역 선언에 사용되며 외부 프로그램으로 접근할 수 있습니다.
import Cocoa class division { var count: Int = 0 func incrementBy(아니요1: Int, 아니요2: Int) { count = 아니요1 / 아니요2 print(count) } } let counter = division() counter.incrementBy(아니요1: 1800, no2: 3) counter.incrementBy(아니요1: 1600, no2: 5) counter.incrementBy(아니요1: 11000, no2: 3)
위 프로그램 실행 출력 결과는 다음과 같습니다:
600 320 3666
우리는 첫 번째 파라미터에 외부 이름을 추가하여 이 로컬 이름을 외부 이름으로 사용합니다(Swift 2.0 앞에는 # 기호를 사용합니다).
반대로, 우리는 다음 파라미터 이상의 파라미터에 이름을 제공하지 않는 외부 이름을 설정할 수 있는 밑줄(_를 사용할 수 있습니다.import Cocoa class multiplication { var count: Int = 0 func incrementBy(first 아니요1: Int, 아니요2: Int) { count = 아니요1 * 아니요2 print(count) } } let counter = multiplication() 0, no 800, no2: 3) 0, no 100, no2: 5) 0, no 15000, no2: 3)
위 프로그램 실행 출력 결과는 다음과 같습니다:
2400 500 45000
각 예제는 은닉 속성 self을 가지며, self은 예제 자체와 동일합니다.
예제의 예제 메서드에서 은닉 속성 self를 사용하여 현재 예제를 참조할 수 있습니다.
import Cocoa class 계산 { 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(c: 20)) print("결과는: \(tot(c: 50)) } } let pri = 계산(a: 600, b: 300) let sum = 계산(a: 1200, b: 300) pri.result() sum.result()
위 프로그램 실행 출력 결과는 다음과 같습니다:
Self 내: 900 Self 내: 1500 결과는: 880 결과는: 850 결과는: 1480 결과는: 1450
Swift 언어에서 구조체와 열거형은 값 타입입니다. 일반적으로 값 타입의 속성은 예제 메서드에서 변경할 수 없습니다.
하지만, 구조체나 열거형의 속성을 특정 메서드에서 실제로 변경해야 한다면, 변경 가능(mutating) 메서드를 선택할 수 있으며, 이 메서드는 메서드 내부에서 속성을 변경할 수 있습니다; 그리고 변경은 메서드가 끝나면 원래 구조체에 유지됩니다.
메서드는 은닉 속성 self에 새로운 예제를 할당할 수 있으며, 이 새로운 예제는 메서드가 끝나면 원래 예제를 대체합니다.
import Cocoa struct 면적 { var 길이 = 1 var 너비 = 1 func 면적() -> Int { return 길이 * 너비 } mutating func scaleBy(res: Int) { 길이 *= res 너비 *= res print(길이) print(너비) } } var val = 면적(길이: 3, 너비: 5) val.scaleBy(res: 3) val.scaleBy(res: 30) val.scaleBy(res: 300)
위 프로그램 실행 출력 결과는 다음과 같습니다:
9 15 270 450 81000 135000
변경 가능한 메서드는 은닉 속성 self에 새로운 예제를 할당할 수 있습니다.
import Cocoa struct 면적 { var 길이 = 1 var 너비 = 1 func 면적() -> Int { return 길이 * 너비 } mutating func scaleBy(res: Int) { self.길이 *= res self.너비 *= res print(길이) print(너비) } } var val = 면적(길이: 3, 너비: 5) val.scaleBy(res: 13)
위 프로그램 실행 출력 결과는 다음과 같습니다:
39 65
예제 메서드는 타입의 특정 예제가 호출하는 메서드입니다. 타입 자체가 호출할 수 있는 메서드를 정의할 수도 있습니다. 이 메서드는 타입 메서드라고 합니다.
구조체와 열거형의 타입 메서드는 메서드의 func 키워드 앞에 static 키워드를 추가하여 선언합니다. 클래스는 class 키워드를 사용하여 부모 클래스의 구현을 재정의할 수 있는 자식 클래스를 허용할 수 있습니다.
타입 메서드는 예제 메서드와 같이 점(.) 문법으로 호출됩니다.
import Cocoa 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)
위 프로그램 실행 출력 결과는 다음과 같습니다:
35 5