투케이2K

583. (ios/swift5) [간단 소스] OperationQueue 사용해 callback 콜백 함수 전역 선언 사용 방법 본문

IOS

583. (ios/swift5) [간단 소스] OperationQueue 사용해 callback 콜백 함수 전역 선언 사용 방법

투케이2K 2024. 12. 1. 00:49

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 

[소스 코드]

 

// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------

- 언어 : Swift


- 개발 툴 : Xcode


- 사전) OperationQueue 설명 :

  >> OperationQueue 는 작업 실행을 조절하는 큐 입니다

  >> OperationQueue 사용 가능 범위 : 

   - iOS 2.0 이상
   - 아이패드OS 2.0 이상
   - 맥 카탈리스트 13.1+
   - 맥OS 10.5 이상
   - tvOS 9.0 이상
   - 비전OS 1.0+
   - 워치OS 2.0 이상

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------

// ------------------------------------------------------------
// MARK: - [전역 변수 선언]
// ------------------------------------------------------------
var connectOperationQueue = OperationQueue() // [작업 큐]
var connectFlag = false // [플래그 값]
var workItem: DispatchWorkItem? = nil // [연결 타임 아웃 핸들러]




// ------------------------------------------------------------
// MARK: [작업 큐에 추가] : 함수에 completion: @escaping (Bool)->() 지정 필요
// ------------------------------------------------------------
self.connectOperationQueue.isSuspended = true
let block = { completion(self.connectFlag) }
self.connectOperationQueue.addOperation(block)




// ------------------------------------------------------------
// MARK: - [타임 아웃 지정 로직 처리 소스 추가]
// ------------------------------------------------------------
self.workItem = DispatchWorkItem {
                    
    var FTP_CONNECT_LOG = "[Time Out] : FTP Connection TimeOut"
        
    S_Log._D_(description: "FTP 연결 실패", data: [
        "M_LOG :: \(FTP_CONNECT_LOG)"
    ])
    
}

let delay = DispatchTime.now() + 20.0 // [특정 시간 후에 실행]
DispatchQueue.main.asyncAfter(deadline: delay, execute: self.workItem!)




// ------------------------------------------------------------
// MARK: - [지정된 작업 취소 방법]
// ------------------------------------------------------------
self.connectFlag = true
self.connectOperationQueue.isSuspended = false

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

https://developer.apple.com/documentation/foundation/operationqueue

// --------------------------------------------------------------------------------------

 

반응형
Comments