我有一個通過BLE UART連接與設備通信的應用程序。 當收到數據時,會調用didReceiveData()委託。 在這裏,我需要確定誰調用了數據並觸發相應的方法(另一個委託)。 我打算創建一個連接字典,該連接字典由建立連接時創建的connectionID字符串以及回調選擇器(可能並不總是提供)所鍵入。在Swift中編程異步委託方法
class Connection: NSObject {
var selectr: Selector
var dataString: String?
init(selectR:Selector,dString:String) {
selectr = selectR
dataString = dString
}
}
connections[String:Connection]()
func sendData(dataString:String,callbackSelector:Selector){
con = Connection(selectR: callbackSelector, dString:"")
connections[cid] = con
}
... 當調用:
let sel = Selector(anotherDelegate?.didReceiveLocation(""))
self.sendData("sendMe",Selector(anotherDelegate?.didReceiveLocation))
我得到了一些錯誤這樣做,第一型的NSData不符合協議StringLiteralConvertible。 NSData引用didReceiveLocation的參數。 第二個是在self.sendData行上:不能用類型參數列表(StringLiteralConvertible,Selector)調用'init'。
這種方法有意義嗎?如何將另一個委託的回調方法存儲在字典或其他結構中,以使其可以從didReceiveData委託方法訪問?
這聽起來像我在找的東西,但我對閉包很陌生,對實現有點困惑。 sendMe()函數與sendData分開嗎?如果我的回調方法是anotherDelegate?.foundLocation(String),我會調用發送數據,如sendData(「findLocation」,「anotherDelegate?.foundLocation(String)」)? – taylormade201 2014-09-28 13:49:49