我正在使用AWS Cognito,在文档中我说我必须添加此功能。
但是我收到了这个错误:
泛型Objective-C类的扩展无法在运行时访问类的泛型参数
extension AWSTask {
public func continueWithExceptionCheckingBlock(completionBlock:@escaping (_ result: Any?, _ error: Error?) -> Void) {
self.continue({(task: AWSTask) -> Any? in
if let exception = task.exception {
print("Fatal exception: \(exception)")
kill(getpid(), SIGKILL);
}
let result: AnyObject? = task.result
let error: NSError? = task.error as NSError?
completionBlock(result, error)
return nil
})
}
}
答案 0 :(得分:18)
对于在 Swift 4 中遇到此问题的用户,请尝试在方法中添加@objc
修饰符。请找到以下示例:
extension NSLayoutAnchor {
@objc func constrainEqual(_ anchor: NSLayoutAnchor<AnchorType>, constant: CGFloat = 0) {
let constraint = self.constraint(equalTo: anchor, constant: constant)
constraint.isActive = true
}
}
答案 1 :(得分:6)
没有上下文我不能说你是否实际上正在做错误消息提示你的,但是有一个开放的错误报告描述了这个问题(实际上没有使用任何违规代码):
<强> ObjC 强>:
@interface MySet<T : id<NSCopying>> : NSObject @end
<强>夫特强>:
class Foo { } struct Bar { } extension MySet { func foo() -> Foo { return Foo() } func bar() -> Bar { return Bar() } }
两种扩展方法都导致“泛型Objective-C类的扩展无法访问类的泛型参数 运行时“。然而,两者都没有真正做到这一点(至少 没有明确地说。)
如果您阅读错误报告的评论,您会注意到用户'Vasili Silin'在尝试扩展AWSTask
时描述了此问题,因此您可能必须考虑其他方法,直到此错误已经解决了。
答案 2 :(得分:3)
我遇到了同样的错误并以这种方式解决:
扩展yourClass,其中T == yourType {}
答案 3 :(得分:1)
我面临以下问题:
错误:“通用的Objective-C类的扩展无法在运行时在Swift 4.2和Xcode 10.2.1中访问该类的通用参数”
我正在使用以下版本的反应性库:
活性可可粉(10.0.0), ReactiveObjC(3.1.1), ReactiveSwift(6.0.0), 结果(4.1.0), Xcode:10.2.1 迅捷版:4.2
代码段:
import Foundation
import ReactiveObjC
import ReactiveSwift
extension RACSignal {
/// Create a `SignalProducer` which will subscribe to the receiver once for
/// each invocation of `start()`.
///
/// - parameters:
/// - file: Current file name.
/// - line: Current line in file.
///
/// - returns: Signal producer created from `self`.
public func toSignalProducer(file: String = #file, line: Int = #line) -> SignalProducer<AnyObject?, NSError> {
return SignalProducer { observer, disposable in
let next: (Any?) -> Void = { obj in
observer.send(value: obj as AnyObject?)
}
let failed: (Error?) -> Void = { nsError in
observer.send(error: nsError as NSError? ?? NSError(domain: "Nil RACSignal error", code: -1, userInfo: [:]))
}
let completed = {
observer.sendCompleted()
}
disposable += self.subscribeNext(next, error: failed, completed: completed)
}
}
}
由于这个问题,我们被封锁了。
有人遇到过同样的问题并找到了解决方法吗?