Membuat operator infiks dengan parameter

Saat ini, saya mencoba menyederhanakan thread latar belakang ke eksekusi thread utama di aplikasi saya.

Cara saya melakukannya adalah ini:

import Foundation

infix operator ~> {}

private let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)

func ~> (backgroundClosure: () -> (), mainClosure: () -> ()) {
    dispatch_async(queue) {
        backgroundClosure()
        dispatch_async(dispatch_get_main_queue(), mainClosure)
    }
}

yang memungkinkan saya melakukan sesuatu seperti:

{ println("executed in background thread") } ~> { println("executed in main thread") }

Sekarang... Saya ingin memperluas fungsi ini agar berpotensi dapat dispatch_after ke thread utama, jadi mungkin saya ingin fungsinya dipanggil 0,25 detik kemudian atau semacamnya.

Apakah ada cara untuk mencapai ini dengan memasukkan parameter?

Idealnya, saya bisa mengimplementasikan sesuatu seperti backgroundClosure ~>(0.25) mainClosure, tapi saya ragu itu mungkin


person David    schedule 14.10.2015    source sumber


Jawaban (2)


Hanya saran:

infix operator ~> {}

private let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)

func ~> (backgroundClosure: () -> (), secondParam: (delayTime:Double, mainClosure: () -> () )) {
    // you can use the `delayTime` here
    dispatch_async(queue) {
        backgroundClosure()
        dispatch_async(dispatch_get_main_queue(), secondParam.mainClosure)
    }
}

Cara Penggunaan:

{ print("executed in background thread") } ~> (0.25, { print("executed in main thread") })
person t4nhpt    schedule 15.10.2015
comment
Oh, ini sebenarnya ide yang bagus. Saya akan mencobanya. - person David; 16.10.2015

coba ini:

private let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)

infix operator ~>{ associativity left precedence 140}

func ~> (backgroundClosure: ()->() , mainClosure: ()->()) {
dispatch_async(queue) { () -> Void in
    backgroundClosure()
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        mainClosure()
    })
}}
person Vandilson Lima    schedule 15.10.2015