수색…


기본 사용

함수는 매개 변수 또는 반환 값없이 선언 될 수 있습니다. 유일한 필수 정보는 이름입니다 (이 경우 hello ).

func hello()
{
    print("Hello World")
}

매개 변수가없는 함수를 호출하려면 이름을 쓰고 그 뒤에 빈 괄호 쌍을 작성하십시오.

hello()
//output: "Hello World"

매개 변수가있는 함수

함수는 매개 변수를 사용하여 해당 기능을 수정할 수 있습니다. 매개 변수는 유형 및 이름이 정의 된 쉼표로 구분 된 목록으로 제공됩니다.

func magicNumber(number1: Int)
{
    print("\(number1) Is the magic number")
}

참고 : \(number1) 구문은 기본 문자열 보간 이며 정수를 문자열에 삽입하는 데 사용됩니다.

매개 변수가있는 함수는 이름으로 함수를 지정하고 함수 선언에 사용 된 유형의 입력 값을 제공하여 호출됩니다.

magicNumber(5)
//output: "5 Is the magic number
let example: Int = 10
magicNumber(example)
//output: "10 Is the magic number"

Int 유형의 모든 값이 사용될 수 있습니다.

func magicNumber(number1: Int, number2: Int)
{
    print("\(number1 + number2) Is the magic number")
}

함수가 여러 매개 변수를 사용하는 경우 첫 번째 매개 변수의 이름은 첫 번째 매개 변수의 이름은 필요하지 않지만 후속 매개 변수는 사용됩니다.

let ten: Int = 10
let five: Int = 5
magicNumber(ten,number2: five)
//output: "15 Is the magic number"

함수 호출을 읽기 쉽게하려면 외부 매개 변수 이름을 사용하십시오.

func magicNumber(one number1: Int, two number2: Int)
{
    print("\(number1 + number2) Is the magic number")
}

let ten: Int = 10
let five: Int = 5
magicNumber(one: ten, two: five)

함수 선언에 기본값을 설정하면 입력 값을주지 않고 함수를 호출 할 수 있습니다.

func magicNumber(one number1: Int = 5, two number2: Int = 10)
{
    print("\(number1 + number2) Is the magic number")
}

magicNumber()
//output: "15 Is the magic number"

반환 값

함수는 매개 변수 목록 뒤에 형식을 지정하여 값을 반환 할 수 있습니다.

func findHypotenuse(a: Double, b: Double) -> Double
{
    return sqrt((a * a) + (b * b))
}

let c = findHypotenuse(3, b: 5)
//c = 5.830951894845301

함수는 튜플을 사용하여 여러 값을 반환 할 수도 있습니다.

func maths(number: Int) -> (times2: Int, times3: Int)
{
    let two = number * 2
    let three = number * 3
    return (two, three)
}
let resultTuple = maths(5)
//resultTuple = (10, 15)

던지기 오류

함수가 오류를 발생 시키게하려면 인수를 포함하는 괄호 뒤에 throws 키워드를 추가해야합니다.

func errorThrower()throws -> String {}

오류를 발생 시키려면 throw 키워드를 사용하십시오.

func errorThrower()throws -> String {
  if true {
    return "True"
  } else {
    // Throwing an error
    throw Error.error 
  }
}

오류가 발생할 수있는 함수를 호출하려면 do 블록에서 try 키워드를 사용해야합니다.

do {
  try errorThrower()
}

신속한 오류에 대한 추가 정보 : 오류

행동 양식

인스턴스 메서드 는 Swift ( 클래스 , 구조체 , 열거 형 또는 프로토콜 )의 형식 인스턴스에 속하는 함수입니다. 형식 메서드 는 형식 자체에서 호출됩니다.

인스턴스 메소드

인스턴스 메소드는 유형의 정의 또는 확장에 func 선언으로 정의됩니다.

class Counter {
    var count = 0
    func increment() {
        count += 1
    }
}

increment() 인스턴스 메서드는 Counter 클래스의 인스턴스에서 호출됩니다.

let counter = Counter()  // create an instance of Counter class   
counter.increment()      // call the instance method on this instance

형식 메서드

유형 메소드는 static func 키워드로 정의됩니다. class func 는 하위 클래스로 재정의 할 수있는 형식 메서드를 정의합니다.

class SomeClass {
    class func someTypeMethod() {
        // type method implementation goes here
    }
}
SomeClass.someTypeMethod()  // type method is called on the SomeClass type itself

입력 매개 변수

함수는 inout 키워드로 표시되면 전달 된 매개 변수를 수정할 수 있습니다. inout 매개 변수를 함수에 전달할 때 호출자는 전달되는 변수에 & 를 추가해야합니다.

func updateFruit(fruit: inout Int) {
    fruit -= 1
}

var apples = 30 // Prints "There's 30 apples"
print("There's \(apples) apples")

updateFruit(fruit: &apples)

print("There's now \(apples) apples") // Prints "There's 29 apples".

이것에 의해, 통상, 값의 시멘틱스를 가지는 형태에 기준 시멘틱스를 적용 할 수 있습니다.

후행 구문

함수의 마지막 매개 변수가 클로저 인 경우

func loadData(id: String, completion:(result: String) -> ()) {
    // ...
    completion(result:"This is the result data")
}

Trailing Closure Syntax를 사용하여 함수를 호출 할 수 있습니다.

loadData("123") { result in
    print(result)
}

연산자는 함수입니다.

+ , - , ?? 와 같은 연산자 ?? 문자가 아닌 기호를 사용하여 명명 된 함수의 일종입니다. 함수와 다르게 호출됩니다.

  • 접두사 : - x
  • 중위 어 : x + y
  • 후위 : x ++

The Swift Programming Language의 기본 운영자고급 운영자 에 대한 자세한 내용을 볼 수 있습니다.

가변 매개 변수

때로 함수가 필요로하는 매개 변수의 수를 나열 할 수 없습니다. sum 함수를 생각해보십시오.

func sum(_ a: Int, _ b: Int) -> Int {
    return a + b
}

이 함수는 두 숫자의 합을 찾는 데는 문제가 없지만 세 가지의 합을 구하려면 다른 함수를 작성해야합니다.

func sum(_ a: Int, _ b: Int, _ c: Int) -> Int {
    return a + b + c
}

네 개의 매개 변수가있는 매개 변수는 다른 매개 변수가 필요합니다. 스위프트 가능 세주기의 시퀀스를 사용하여 수의 매개 변수와 함수를 정의 할 수있다 : ... . 예를 들어,

func sum(_ numbers: Int...) -> Int {
    return numbers.reduce(0, combine: +)
}

variadic 인 numbers 매개 변수가 [Int] 유형의 단일 Array 로 통합되는 방법에 유의하십시오. 이것은 일반적으로 T... 타입의 변수 매개 변수는 [T] 로 액세스 할 수 있습니다.

이 함수는 이제 다음과 같이 호출 할 수 있습니다.

let a = sum(1, 2) // a == 3
let b = sum(3, 4, 5, 6, 7) // b == 25

Swift에서 variadic 매개 변수는 매개 변수 목록의 끝에 올 필요는 없지만 각 함수 서명에는 하나만있을 수 있습니다.

때로는 매개 변수의 수에 최소 크기를 두는 것이 편리합니다. 예를 들어, 값이없는 sum 를 취하는 것은 실제로 의미가 없습니다. 이것을 시행하는 쉬운 방법은 variadic이 아닌 필수 매개 변수를 넣은 다음 variadic 매개 변수를 추가하는 것입니다. sum 를 적어도 두 개의 매개 변수로만 호출 할 수 있도록하려면 다음과 같이 작성할 수 있습니다.

func sum(_ n1: Int, _ n2: Int, _ numbers: Int...) -> Int {
    return numbers.reduce(n1 + n2, combine: +)
}

sum(1, 2) // ok
sum(3, 4, 5, 6, 7) // ok
sum(1) // not ok
sum() // not ok

첨자

클래스, 구조 및 열거 형은 컬렉션, 목록 또는 시퀀스의 멤버 요소에 액세스하기위한 바로 가기 인 하위 스크립트를 정의 할 수 있습니다.

struct DaysOfWeek {
  
  var days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
  
  subscript(index: Int) -> String {
    get {
      return days[index]
    }
    set {
      days[index] = newValue
    }
  }
}

첨자 사용

var week = DaysOfWeek()
//you access an element of an array at index by array[index].
debugPrint(week[1])
debugPrint(week[0])
week[0] = "Sunday"
debugPrint(week[0])

아래 첨자 옵션 :

아래 첨자는 임의의 수의 입력 매개 변수를 취할 수 있으며 이러한 입력 매개 변수는 모든 유형이 될 수 있습니다. 또한 subscript는 모든 유형을 반환 할 수 있습니다. 아래 첨자는 가변 매개 변수와 가변 매개 변수를 사용할 수 있지만, in-out 매개 변수를 사용하거나 기본 매개 변수 값을 제공 할 수는 없습니다.

예:

struct Food {
  
  enum MealTime {
    case Breakfast, Lunch, Dinner
  }
  
  var meals: [MealTime: String] = [:]
  
  subscript (type: MealTime) -> String? {
    get {
      return meals[type]
    }
    set {
      meals[type] = newValue
    }
  }
}

용법

var diet = Food()
diet[.Breakfast] = "Scrambled Eggs"
diet[.Lunch] = "Rice"

debugPrint("I had \(diet[.Breakfast]) for breakfast")

클로저 기능

클로저를 받아 들여 실행하는 함수를 사용하면 코드 블록을 다른 곳에서 전송할 때 매우 유용 할 수 있습니다. 우리는 함수가 (이 경우) Void 반환하는 선택적 클로저를 사용하도록 허용함으로써 시작할 수 있습니다.

func closedFunc(block: (()->Void)? = nil) {
    print("Just beginning")

    if let block = block {
        block()
    }
}

이제 우리 함수가 정의되었으므로 호출하고 코드를 전달해 보겠습니다.

closedFunc() { Void in
    print("Over already")
}

함수 호출에서 후행 폐쇄 를 사용하면 closedFunc() 함수 내의 특정 시점에서 코드가 실행되도록 할 수 있습니다 (이 경우 print ).

로그는 다음과 같이 인쇄되어야합니다.

막 시작한

이미 끝났어.


이것의보다 구체적인 사용 사례는 두 클래스 사이의 코드 실행을 포함 할 수 있습니다.

class ViewController: UIViewController {

    override func viewDidLoad() {
        let _  = A.init(){Void in self.action(2)}
    }

    func action(i: Int) {
        print(i)
    }
}


class A: NSObject {
    var closure : ()?

    init(closure: (()->Void)? = nil) {
        // Notice how this is executed before the  closure
        print("1")
        // Make sure closure isn't nil
        self.closure = closure?()
    }
}

로그는 다음과 같이 인쇄되어야합니다.

1

2

함수 전달 및 반환

다음 함수는 결과로 다른 함수를 반환하고 나중에 변수에 할당하여 호출 할 수 있습니다.

func jediTrainer () -> ((String, Int) -> String) {
  func train(name: String, times: Int) -> (String) {
    return "\(name) has been trained in the Force \(times) times"
  }
  return train
}

let train = jediTrainer()
train("Obi Wan", 3)

함수 유형

모든 함수는 매개 변수 형식과 함수 자체의 반환 형식으로 구성된 자체 함수 형식을가집니다. 예를 들면 다음과 같은 함수 :

func sum(x: Int, y: Int) -> (result: Int) { return x + y }

함수 유형은 다음과 같습니다.

(Int, Int) -> (Int)

따라서 함수 유형을 매개 변수 유형 또는 중첩 기능의 리턴 유형으로 사용할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow