我有两个文件,其中一个名为CodeInjection.m,内容类似于
#import <Foundation/Foundation.h>
#import "Someheaderfile.h"
@interface CodeInjection: NSObject
@end
@implementation CodeInjection
static void __attribute__((constructor)) initialize(void){
NSLog(@"==== Code Injection in Action====");
[[CodeInjectionSwift shared] performTask];
}
@end
然后我有一个包含内容的CodeInjectionSwift.swift文件
import Foundation
import NetworkInterceptor
@objc class CodeInjectionSwift: NSObject {
@objc public static let shared = CodeInjectionSwift()
override private init(){}
@objc func performTask(){
let requestSniffers: [RequestSniffer] = [
RequestSniffer(requestEvaluator: AnyHttpRequestEvaluator(), handlers: [
SniffableRequestHandlerRegistrable.console(logginMode: .nslog).requestHandler()
])
]
let requestRedirectors: [RequestRedirector] = [
RequestRedirector(requestEvaluator: DomainHttpRequestEvaluator(domain: "www.antennahouse.com"), redirectableRequestHandler: AlternateUrlRequestRedirector(url: URL(string: "https://www.rhodeshouse.ox.ac.uk/media/1002/sample-pdf-file.pdf")!))
]
let networkConfig = NetworkInterceptorConfig(requestSniffers: requestSniffers,
requestRedirectors: requestRedirectors)
NetworkInterceptor.shared.setup(config: networkConfig)
NetworkInterceptor.shared.startRecording()
}
}
尝试使用“ CodeInjectionSwift”时,出现类似错误
答案 0 :(得分:0)
将@objc func performTask()
设为公开:
@objc public func performTask()
答案 1 :(得分:0)
我的原始答案是错误的。我将其留在下面以供参考。
实际上,整个问题是您需要将一个特殊的标头导入到Objective-C类中。
#import "TestImportSwift-Swift.h"
其中TestImportSwift
被项目名称替换。
错误的旧答案
shared
不是class
成员,而是static
成员。不幸的是,Swift不支持类变量,仅支持函数,因此您可以尝试
@objc class CodeInjectionSwift: NSObject {
static let _shared = CodeInjectionSwift()
@objc public class func shared() -> CodeInjectionSwift { return _shared }
// Rest of the class
请注意,我尚未在实际项目中尝试过此操作。