Swift Language
기능들
수색…
기본 사용
함수는 매개 변수 또는 반환 값없이 선언 될 수 있습니다. 유일한 필수 정보는 이름입니다 (이 경우 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)
따라서 함수 유형을 매개 변수 유형 또는 중첩 기능의 리턴 유형으로 사용할 수 있습니다.