DongSup
dev's gait
DongSup
전체 방문자
오늘
어제
  • 분류 전체보기 (71)
    • flask (13)
    • iOS (11)
    • python (22)
    • CS (21)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 파이썬
  • 한걸음
  • Swift
  • 첫글
  • 언어공부

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
DongSup

dev's gait

Swift 문법 (1급 객체 / 1급 시민 / 글로저 / 클래스 기초)
iOS

Swift 문법 (1급 객체 / 1급 시민 / 글로저 / 클래스 기초)

2021. 10. 5. 21:30

1급 객체, 1급 시민

 

func inchesToFeet (inches: Float) -> Float {

return inches * 0.0833333

}

func inchesToYards (inches: Float) -> Float {

return inches * 0.0277778

}

let toFeet = inchesToFeet //함수를 자료형처럼 사용하여 변수에 저장할 수 있다.

let toYards = inchesToYards

print(type(of:toFeet)) // (inches: Float) -> Float 부분 때문에 자료형은 Float

print(inchesToFeet(inches:10))

print(toFeet(10))

func outputConversion(converterFunc: (Float) -> Float, value: Float) {//함수를 매개변수로 전달 (Float) -> Float

let result = converterFunc(value) //toFeet(10)

print("Result = \(result)")

}

outputConversion(converterFunc:toFeet, value: 10) // 피트로 변환하는 inchesToFeet함수 호출

func decideFunction (feet: Bool) -> (Float) -> Float

{ //매개변수형 리턴형이 함수형 (리턴값으로 사용할 수 있다.)

if feet {

return toFeet //함수를 리턴

} else {

return toYards

}

}

//(Float) -> Float

//0.833333

//0.833333

//Result = 0.833333

 

🔳 1급 객체의 3가지 조건

 

◼ 함수를 자료형처럼 사용하여 변수에 저장할 수 있다.

 

◼ 매개변수로 전달할 수 있다.

 

◼ 리턴값으로 사용할 수 있다.

 

 

func me(age: Double) -> Double {

    return age + 1.0

}

func you(age : Double) -> Double{

    return age - 1.0

}

let toMe = me

print(me(age:23.0))

let toYou = you

print(you(age:23.0))

print(toMe(23.0))

print(toYou(23.0))

func youAndme(love: (Double) -> Double, value: Double) {

let result = love(value)

print("매개변수로 전달 : \(result)")

}

youAndme(love:toMe, value: 23.0)

youAndme(love:toYou, value: 23.0)

func lovelove(x: Bool) -> (Double) -> Double {

if x {

return toMe

} else {

return toYou

}

}

let h = lovelove(x:true)

print(type(of:h))

print(h(2999.0))

//24.0

//22.0

//24.0

//22.0

//매개변수로 전달 : 24.0

//매개변수로 전달 : 22.0

//(Double) -> Double

//3000.0


 

클로저(Closure)

 

func add(x: Int, y: Int) -> Int {

return(x+y)

}

print(add(x:10, y:20))

let add1 = { (x: Int, y: Int) -> Int in

return(x+y)

}

print(add1(10, 20)) //print(add1(x:10, y:20)) error

print(type(of:add1))

 

let Id = { (first: String , name: String) -> String in

return ("\(first), \(name)")

}

print(Id("안","동섭"))

//30

//30

//(Int, Int) -> Int

//안, 동섭

 

◼ 매개변수를 받거나, 값을 반환하도록 만들 수도 있음

 

 

func mul(val1: Int, val2: Int) -> Int

{

return val1 * val2

}

let result = mul(val1:10, val2:20)

print(result)

let multiply = {(val1: Int, val2: Int) -> Int in

//매개변수 리턴형

return val1 * val2

}// 여기서 multiply의 자료형은 (Int, Int) -> Int

let result1 = multiply(10, 20) //상수를 함수처럼 호출,200

print(result1)

//200

//200

 

◼ 두 개의 정수 매개변수를 받아서 정수 결과 값을 반환

 


let me = {(age: Double) -> Double in

    return age + 1.0

}

var result = me(23)

print(result)

func meX(ageX: Double) -> Double {

    return ageX + 1.0

}

print(meX(ageX:20))


let IdX = {(firstX: Int, nameX: Int) -> Int in

    return firstX + nameX

}

var result2 = IdX(27, 40)

print(result2)

let IdY = {(firstX: Int, nameX: Int) -> Int in

    return firstX + nameX

}

result2 = IdY(80, 80)

print(result2)


 

func Id(first: Int , name: Int, full: (Int, Int) -> Int) -> Int {

    return full(first, name)

}

result2 = Id(first: 34, name: 21, full: IdX)

print(result2)

result2 = Id(first: 25, name: 12, full: IdY)

print(result2)


 

result2 = Id(first: 30 , name: 20, full: {(first: Int, name: Int) -> Int in

    return first + name

})

print(result2)

//클로저 소스를 매개변수에 직접 작성

result2 = Id(first: 20 , name: 20) {(first: Int, name: Int) -> Int in

    return first + name

}

print(result2)

 

◼ 마지막 매개변수 이름(full:)을 생략한 후 함수 소괄호 외부에 클로저를 구현


result2 = Id(first: 30 , name: 20, full: {(first: Int, name: Int) in

    return first + name

})

print(result2)

//리턴형 생략

result2 = Id(first: 20 , name: 20) {(first: Int, name: Int) in

    return first + name

}

print(result2) //trailing closure, 리턴형 생략


result2 = Id(first: 1, name: 2, full: {

    return $0 + $1

})

print(result2)

 //매개변수 생략하고 단축인자(shorthand argument name)사용

result2 = Id(first: 2, name: 3) {

    return $0 + $1

} //trailing closure, 매개변수 생략하고 단축인자사용

print(result2)


result2 = Id(first: 3, name: 4, full: {

    $0 + $1

})

print(result2)

//클로저에 리턴값이 있으면 마지막 줄을 리턴하므로 return생략

result2 = Id(first: 4, name: 5) {$0 + $1}

print(result2)  //return 생략


 

클래스(class)

 

class Id {

var first : String = "안" //  var 변수명: 자료형 = 초기값

var name : String = "동섭"

func display(){ //인스턴스 메서드

print("성=\(first), 이름=\(name)")

}

}

//var kim : Man = Man() //  var 인스턴스명 : 클래스명 = 클래스명()

var kim = Id() // var 인스턴스명 = 클래스명()

print(kim.first) //인스턴스.프로퍼티

kim.display() // 인스턴스.인스턴스메서드 , 인스턴스 메서드는 인스턴스가 호출

//안

//성=안, 이름=동섭

 

◼ 인스턴스 만들고 메서드와 프로퍼티 접근

'iOS' 카테고리의 다른 글

Swift 문법 (extension / 접근 제어 / protocol / enum)  (0) 2021.10.19
Swift 문법 (클래스/ 클래스 상속)  (0) 2021.10.12
Swift 문법 (guard / switch-case / 함수)  (0) 2021.09.28
옵셔널(optional) / 연산자(operator) / 제어문  (0) 2021.09.21
Swift  (0) 2021.09.14
    'iOS' 카테고리의 다른 글
    • Swift 문법 (extension / 접근 제어 / protocol / enum)
    • Swift 문법 (클래스/ 클래스 상속)
    • Swift 문법 (guard / switch-case / 함수)
    • 옵셔널(optional) / 연산자(operator) / 제어문
    DongSup
    DongSup

    티스토리툴바