Tôi đang làm việc với một Observer
API (ObserverSet) có chức năng sau:nhanh chóng - một phần ứng dụng chức năng với Generics
public func add<T: AnyObject>(object: T, _ f: T -> Parameters -> Void) -> ObserverSetEntry<Parameters>
Nó chỉ đơn giản đăng ký một object
sau đó gọi phương thức dụ f
trên object
khi thông báo kích hoạt
Trong một người quản lý của tôi, tôi cần phải ẩn chức năng trước đó với một trong số của tôi để tôi có thể buộc một người quan sát gọi một chức năng định sẵn được thực hiện thông qua giao thức.
Dưới đây là những gì tôi đã làm như vậy cho đến nay:
@objc protocol Observer : NSObjectProtocol {
func observe(param: String) -> Void
}
func addObserver<T: AnyObject where T: Observer>(observer: T) {
let f: T -> String -> Void = observer.dynamicType.observe
entries.addObserver(observer, f)
}
Thật không may, tôi đã được lỗi sau hiển thị Partial application of generic method is not allowed
Tôi đã tìm thấy một workaround có thể ở đâu đó trên SO trông như thế:
let f: T -> String -> Void = { (obs: T) in obs.dynamicType.observe(obs) }
Nhưng dòng mã này khiến XCode tôi điên với một số Segmentation Fault: 11
trên biên soạn (và Communication interrupted
với Playground
..)
Có cách giải quyết nào cho những gì tôi đang cố gắng làm không?
Điều gì xảy ra nếu bạn khai báo giao thức của mình dưới dạng giao thức Swift thuần túy thay vì làm giảm giao thức thành giao thức objc? – augustzf
Lỗi chính xác tương tự. Nếu tôi cũng loại bỏ việc thực hiện 'NSObjectProtocol' tôi nhận được' lỗi: 'T' không phải là một kiểu con của 'inout T'' – Yaman