Avatar
Avatar
Yuta Saito
どこで欲しくなるんだろう
omochimetaru 4/7/2024 2:50 AM
WebMock を実装してて困った。 public class WebEventTarget: JSNativeObject { public init() { } private var listeners: [String: [JSFunction]] = [:] public func addEventListener(_ type: String, _ listener: JSFunction) { var lns = self.listeners[type] ?? [] if lns.contains(listener) { return } lns.append(listener) self.listeners[type] = lns } public func removeEventListener(_ type: String, _ listener: JSFunction) { guard var lns = self.listeners[type] else { return } lns.removeAll { $0 == listener } self.listeners[type] = lns } public func dispatchEvent(_ event: WebEvent) -> Bool { guard let lns = self.listeners[event.type] else { return true } for ln in lns { ln(event) } return true }
2:50 AM
Web側のモックだから本物のJavaScriptKitと連動することはないのでそういう意味では実際には不要ですけど・・・
2:51 AM
一般的にいうと、Swift上で、Rxみたいな関数を登録しておいて後で使う仕組みを JSFunction に対して作ろうとすると困ると思う
2:52 AM
JSClosureも渡せるようにしたいだろうから。