Можно ли использовать методы NSStreamDelegate внутри пользовательских фреймворков в IOS?

Я пытаюсь создать пользовательский фреймворк, который будет говорить с внешним аксессуаром

public class AccessoryClass : NSObject, NSStreamDelegate {

        func getConnectedAccessoris() -> Array<EAAccessory>{
            let accessories : Array<EAAccessory> = EAAccessoryManager.sharedAccessoryManager().connectedAccessories
            return accessories
        }

    public func openAccessory() {
            let _accessories = getConnectedAccessoris()
            var _accessory: EAAccessory?
            for acsy in _accessories {
                if acsy.protocolStrings.contains(PROTOCOL_STRING) {
                    _accessory = acsy
                }
            }
            if _accessory != nil {
                _session = EASession(accessory: _accessory!, forProtocol: protocolString)
                if _session != nil {
                    _session?.inputStream?.delegate = self
                    _session?.inputStream?.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
                    _session?.inputStream?.open()
                    _session?.outputStream?.delegate = self
                    _session?.outputStream?.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
                    _session?.outputStream?.open()                    
                }
            }
        }


    func stream(aStream: NSStream, handleEvent eventCode: NSStreamEvent) {
        switch (eventCode) {
        case NSStreamEvent.None:
            print("NSStream None")
            break
        case NSStreamEvent.OpenCompleted:
            print("Open Completed")
            break
        case NSStreamEvent.HasBytesAvailable:
            print("Has Bytes Available")
//            _readData()
            break
        case NSStreamEvent.HasSpaceAvailable:
            print("Hase space Available")
//            _writeData()
            break
        case NSStreamEvent.ErrorOccurred:
           print("Error occurred")
            break
        case NSStreamEvent.EndEncountered:
            print("End Encountered")
            break
        default:
            print("No stream event")
            break
        }
    }

}

Я пытался так, StreamDelegate только получить сбой. без этого кода _session?.inputStream?.delegate = self работает нормально.

Я сомневаюсь, что можно использовать методы делегата ios при создании пользовательского фреймворка. если нет, какую процедуру использовать??

Спасибо

1 ответ

Используйте охрану, а затем установите делегата

guard let inputStream = session.inputStream else {
            return
        }

inputStream.delegate = self
inputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode:NSDefaultRunLoopMode)
inputStream.open()
Другие вопросы по тегам