Ios xcode 8.3泛型错误 协议发布子事件{ associatedtype事件结果 静态func eventName()->String func event()->EventResult func send() } BGEventBus类:EventBus{ 静态let sharedInstance=BGEventBus() init(){ super.init(队列:OperationQueue()) } } 类BGEventBusEvent:PubSubEvent{ typealias EventResult=BGEventBusEvent 类func eventName()->String{ 返回字符串(描述:self) } func send(){ BGEventBus.sharedInstance.send(事件:self) } func event()->BGEventBusEvent.EventResult{ 回归自我 } } 类BGDidLoginEvent:BGEventBusEvent{ typealias EventResult=BGDidLoginEvent var密码:字符串? var facebookToken:字符串? init(密码:String?=nil,facebookToken:String?=nil){ self.password=密码 self.facebookToken=facebookToken } } 类事件总线{ 变量队列:操作队列 初始化(队列:操作队列){ self.queue=队列 } func send(事件:AnyObject){ } func handleEvent(目标:EventBusObservable,把手锁:((T.EventResult)->Void)!)其中T.EventResult==T{ } } 类事件观察者{ var objectProtocol:NSObjectProtocol? func addObserver(forName:NSNotification.name?,object obj:Any?,queue:OperationQueue?,使用block:@escaping(Notification)->Swift.Void){ self.objectProtocol=NotificationCenter.default.addObserver(forName:name,object:obj,queue:queue,using:block) } 脱硝{ 如果让obj=self.objectProtocol{ NotificationCenter.default.removeObserver(obj) } self.objectProtocol=nil 打印(“Denit observer!”) } } 协议事件不可观测{ func handlegevent(把手锁:((T.EventResult)->Void)!)其中T.EventResult==T } 可观察的扩展事件{ func handledgevent(handleBlock:((T)->Void)!)其中T:PubSubEvent,T.EventResult==T{ BGEventBus.sharedInstance.handleEvent(目标:self,handleBlock:handleBlock) } } 类示例:EventBusObservable{ func测试(){ self.handledgevent{(事件:bgdilogenvent)位于 } } }
大家好,我将Xcode更新为8.3,现在出现了如下错误: 无法将类型为“(bgdiloginevent)->()”的值转换为所需的参数类型“((\u)->Void)!” 有人能帮我吗Ios xcode 8.3泛型错误 协议发布子事件{ associatedtype事件结果 静态func eventName()->String func event()->EventResult func send() } BGEventBus类:EventBus{ 静态let sharedInstance=BGEventBus() init(){ super.init(队列:OperationQueue()) } } 类BGEventBusEvent:PubSubEvent{ typealias EventResult=BGEventBusEvent 类func eventName()->String{ 返回字符串(描述:self) } func send(){ BGEventBus.sharedInstance.send(事件:self) } func event()->BGEventBusEvent.EventResult{ 回归自我 } } 类BGDidLoginEvent:BGEventBusEvent{ typealias EventResult=BGDidLoginEvent var密码:字符串? var facebookToken:字符串? init(密码:String?=nil,facebookToken:String?=nil){ self.password=密码 self.facebookToken=facebookToken } } 类事件总线{ 变量队列:操作队列 初始化(队列:操作队列){ self.queue=队列 } func send(事件:AnyObject){ } func handleEvent(目标:EventBusObservable,把手锁:((T.EventResult)->Void)!)其中T.EventResult==T{ } } 类事件观察者{ var objectProtocol:NSObjectProtocol? func addObserver(forName:NSNotification.name?,object obj:Any?,queue:OperationQueue?,使用block:@escaping(Notification)->Swift.Void){ self.objectProtocol=NotificationCenter.default.addObserver(forName:name,object:obj,queue:queue,using:block) } 脱硝{ 如果让obj=self.objectProtocol{ NotificationCenter.default.removeObserver(obj) } self.objectProtocol=nil 打印(“Denit observer!”) } } 协议事件不可观测{ func handlegevent(把手锁:((T.EventResult)->Void)!)其中T.EventResult==T } 可观察的扩展事件{ func handledgevent(handleBlock:((T)->Void)!)其中T:PubSubEvent,T.EventResult==T{ BGEventBus.sharedInstance.handleEvent(目标:self,handleBlock:handleBlock) } } 类示例:EventBusObservable{ func测试(){ self.handledgevent{(事件:bgdilogenvent)位于 } } },ios,swift,xcode,generics,Ios,Swift,Xcode,Generics,大家好,我将Xcode更新为8.3,现在出现了如下错误: 无法将类型为“(bgdiloginevent)->()”的值转换为所需的参数类型“((\u)->Void)!” 有人能帮我吗 这里是示例文件我认为您每次都必须以完全相同的方式编写通用需求。因此,在EventBus中: protocol PubSubEvent { associatedtype EventResult static func eventName() -> String func event()
这里是示例文件我认为您每次都必须以完全相同的方式编写通用需求。因此,在EventBus中:
protocol PubSubEvent {
associatedtype EventResult
static func eventName() -> String
func event() -> EventResult
func send()
}
class BGEventBus: EventBus {
static let sharedInstance = BGEventBus()
init() {
super.init(queue: OperationQueue())
}
}
class BGEventBusEvent: PubSubEvent {
typealias EventResult = BGEventBusEvent
class func eventName() -> String {
return String(describing: self)
}
func send() {
BGEventBus.sharedInstance.send(event: self)
}
func event() -> BGEventBusEvent.EventResult {
return self
}
}
class BGDidLoginEvent: BGEventBusEvent {
typealias EventResult = BGDidLoginEvent
var password: String?
var facebookToken: String?
init(password: String? = nil, facebookToken: String? = nil) {
self.password = password
self.facebookToken = facebookToken
}
}
class EventBus {
var queue: OperationQueue
init(queue: OperationQueue) {
self.queue = queue
}
func send(event: AnyObject) {
}
func handleEvent<T: PubSubEvent>(target:EventBusObservable, handleBlock: ((T.EventResult) -> Void)!) where T.EventResult == T {
}
}
class EventBusObserver {
var objectProtocol: NSObjectProtocol?
func addObserver(forName name: NSNotification.Name?, object obj: Any?, queue: OperationQueue?, using block: @escaping (Notification) -> Swift.Void) {
self.objectProtocol = NotificationCenter.default.addObserver(forName: name, object: obj, queue: queue, using: block)
}
deinit {
if let obj = self.objectProtocol {
NotificationCenter.default.removeObserver(obj)
}
self.objectProtocol = nil
print("deinit observer!")
}
}
protocol EventBusObservable {
func handleBGEvent<T: PubSubEvent>(handleBlock: ((T.EventResult) -> Void)!) where T.EventResult == T
}
extension EventBusObservable {
func handleBGEvent<T>(handleBlock: ((T) -> Void)!) where T : PubSubEvent, T.EventResult == T {
BGEventBus.sharedInstance.handleEvent(target: self, handleBlock:handleBlock)
}
}
class sample: EventBusObservable {
func test() {
self.handleBGEvent { (event: BGDidLoginEvent) in
}
}
}
class BGEventBus:EventBus{static let sharedInstance=BGEventBus()init(){super.init(queue:OperationQueue())}}
我刚刚更新了示例代码Hi Matt对此表示抱歉,这里有一个文件,其中包含复制我的错误的所有代码,谢谢。我会将其粘贴到您的问题中。我不明白你为什么不能粘贴它。好吧,我建议你在bugs.swift.org上提交一份bug报告,并解释这是在Xcode 8.2中编译的,而不是在Xcode 8.3中编译的。
class EventBus {
// ...
func handleEvent<T>(target:EventBusObservable, handleBlock: ((T) -> Void)!) where T : PubSubEvent, T.EventResult == T {
}
}
protocol EventBusObservable {
func handleBGEvent<T>(handleBlock: ((T) -> Void)!) where T : PubSubEvent, T.EventResult == T
}
extension EventBusObservable {
func handleBGEvent<T>(handleBlock: ((T) -> Void)!) where T : PubSubEvent, T.EventResult == T {
BGEventBus.sharedInstance.handleEvent(target: self, handleBlock: handleBlock)
}
}
class sample: EventBusObservable {
func test() {
self.handleBGEvent {
(event:BGEventBusEvent) in
}
}
}