Можно ли использовать методы 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()