Существуют ли более современные реализации членства / безопасности, чем поставщик членства ASP.NET?

(см. ответ Патрика Ф. для обновления для Swift 3/4.)

Вы можете читать асинхронно из канала, используя уведомления. Вот простой пример, демонстрирующий, как это работает, надеюсь, что это поможет вам начать:

let task = NSTask()
task.launchPath = "/bin/sh"
task.arguments = ["-c", "echo 1 ; sleep 1 ; echo 2 ; sleep 1 ; echo 3 ; sleep 1 ; echo 4"]

let pipe = NSPipe()
task.standardOutput = pipe
let outHandle = pipe.fileHandleForReading
outHandle.waitForDataInBackgroundAndNotify()

var obs1 : NSObjectProtocol!
obs1 = NSNotificationCenter.defaultCenter().addObserverForName(NSFileHandleDataAvailableNotification,
    object: outHandle, queue: nil) {  notification -> Void in
        let data = outHandle.availableData
        if data.length > 0 {
            if let str = NSString(data: data, encoding: NSUTF8StringEncoding) {
                print("got output: \(str)")
            }
            outHandle.waitForDataInBackgroundAndNotify()
        } else {
            print("EOF on stdout from process")
            NSNotificationCenter.defaultCenter().removeObserver(obs1)
        }
}

var obs2 : NSObjectProtocol!
obs2 = NSNotificationCenter.defaultCenter().addObserverForName(NSTaskDidTerminateNotification,
    object: task, queue: nil) { notification -> Void in
        print("terminated")
        NSNotificationCenter.defaultCenter().removeObserver(obs2)
}

task.launch()

Вместо print("got output: \(str)") вы можете добавить полученную строку в текстовое представление.

В приведенном выше коде предполагается, что runloop активен (что имеет место в приложении Cocoa по умолчанию).

21
задан Community 23 May 2017 в 10:00
поделиться