60 - Swift 의 폐쇄 (Closure)

폐쇄 적 소개
패 킷 닫 기 는 자유 (특정 대상 에 연결 되 지 않 음) 변 수 를 포함 할 수 있 는 코드 블록 을 말한다.설명: 실행 할 코드 블록 (자유 변수 가 코드 블록 에 포함 되 어 있 기 때문에 이러한 자유 변수 와 인용 대상 이 방출 되 지 않 았 습 니 다) 과 자유 변수 에 연 결 된 계산 환경 (역할 영역) 을 제공 합 니 다.
2. 폐쇄 적 인 형식
          : A 
       1 :    B
       2 :    C
       1、2    :  D
            : E
     
            :
     
     A : (_ B:D ,_ C:D)-> E
     
       :  let  sum : (_ index :Int) -> Int
     
       : B/C/E       。      A      ,       。

3. 폐쇄 적 인 몇 가지 형식
1 > 매개 변수 없 음, 반환 값 없 음
// TODO :      、      
let ClosureModel_1 : ()->() = {
    print("     、      ")
}
//     
ClosureModel_1()

2 > 매개 변수 가 반환 값 이 없 는 패키지
// TODO :    、       
let ClosureModel_2 : (_ index:Int)->() = { index in
    print("      :"+"\(index)")
}
//     
ClosureModel_2(120)

3 > 여러 매개 변수 가 반환 값 이 없 는 패키지
// TODO :     、    
let ClosureModel_3 : (_ index:Int,_ index_1:Int)->() = { (index,index_1) in
    print("      :" + "\(index + index_1)")
}
//     
ClosureModel_3(110,120)

4 > 매개 변수 없 이 반환 값 이 있 는 패키지
// TODO :    、    
let ClosureModel_4 :()->Int = {
    return 110
}
//   
print("            :" + "\(ClosureModel_4())")

5 > 매개 변수 가 반환 값 이 있 는 패키지
// TODO :    ,    
let ClosutreModel_5 : (_ index:Int)->Int = { (index:Int) in
    let temp = 200
    return temp * index
}
//   
print("           :" + "\(ClosutreModel_5(110))")

4. 별명 (typealias) 을 사용 하여 패 키 지 를 만 듭 니 다.
1 > 인자 가 없 는 반환 값 이 없 는 패키지
typealias ClosureModel_6 = ()->()

//       
let Closure :ClosureModel_6 = {
    print("        ")
}
//   
Closure()

2 > 매개 변수 가 반환 값 이 있 음
typealias ClosureModel_7 = (_ index:Int)-> Int

//       
let Closure1:ClosureModel_7 = { index in
    let temp = 100
    return temp * index
}
//   
print("           :" + "\(Closure1(20))")

5. 뒤 를 따라 가방 을 닫는다.
1 > 가방 을 뒤 따 르 는 것 은 무엇 입 니까?
꼬리 패 킷 은 패 킷 을 함수 로 하 는 마지막 매개 변 수 를 말 하 며 꼬리 패 킷 이 라 고 합 니 다.
2 > 매개 변수 와 반환 값 이 있 는 꼬리 패키지
// TODO :     ,         

func sum(index:Int,max:(_ value:Int,_ kvalue:Int)->Int) -> Int {
     return  max(index,index)
}

// MARK :        
print(sum(index: 3){ closure,closure_k in
    return closure * closure_k
})

3 > 매개 변수 와 반환 값 이 없 는 마지막 패키지
// TODO :     ,        

func reduction(index:Int,index1:Int,max:()->()) -> Int {
     max()
     return index - index1
}

//       
print(reduction(index: 100, index1: 20){
    print("           ")
})


6. 가방 을 닫 고 값 을 얻는다.
// MARK :       

func getValue(param value:Int) -> ()->Int {
    var toale = 0
    func max()->Int {
        toale += value
        return  toale
    }
    return max
}

// MARk :         
print(getValue(param: 10)())   //     10
print(getValue(param: 10)())   //     10 
  :     ,         (    ),     .

//       
let paramValue = getValue(param: 10)
print(paramValue())  //     10
print(paramValue()) //      20


7. 자동 폐쇄
1 > 자동 폐쇄 의 특징
  • 자동 패 킷 은 자동 으로 생 성 된 패 킷 으로 함수 매개 변 수 를 포장 하 는 표현 식
  • 입 니 다.
  • 자동 으로 패 키 지 를 닫 는 것 은 어떠한 인자 도 받 아들 이지 않 고 호출 될 때 포 장 된 표현 식
  • 을 되 돌려 줍 니 다.
  • 자동 패 킷 을 닫 으 면 로드 구 치 를 지연 시 킬 수 있 습 니 다
  • 2 > 자동 폐쇄 사용
    var ParamArray = ["2","3","4"]
    //          
    print(ParamArray.count)
    //       
    let removeSwift = {
        ParamArray.remove(at: 2)
    }
    //           
    print(ParamArray.count)
    //       
    print(removeSwift())
    //            
    print(ParamArray.count)
    

    8. 탈출 폐쇄
    1 > 탈출 폐쇄 의 해석
    패 킷 을 매개 변수 로 함수 에 전달 할 때 이 패 킷 은 함수 가 돌아 온 후에 야 실 행 됩 니 다. 우 리 는 이 패 킷 이 함수 종 에서 탈출 했다 고 부 릅 니 다.일반적으로 패 킷 이 함수 내 에서 비동기 작업 과 관련 되 지만 함 수 는 곧 실 행 될 것 이 고 돌아 올 것 이 며 패 킷 은 비동기 작업 의 반전 을 위해 도망 가 야 합 니 다.탈출 패 키 지 는 일반적으로 비동기 함수 의 리 셋 에 사 용 됩 니 다. 예 를 들 어 네트워크 가 성공 적 인 리 셋 과 실패 한 리 셋 을 요청 합 니 다.문법: 함수 의 패 킷 행 참조 전에 키워드 '@ escaping' 을 추가 합 니 다.
    2 > 패키지 사용
    // TODO :     
    func doSomething(some: @escaping () -> Void){
        //    ,         
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1) {
            //1    
            some()
        }
        print("   ")
    }
    
    doSomething {
        print("    ")
    }
    
    

    좋은 웹페이지 즐겨찾기