Не известен метод класса для селектора 'name' - PullRequest
0 голосов
/ 04 октября 2019

enter image description here У меня есть два файла, один из которых называется 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» я получаю такие ошибки

enter image description here

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Мой оригинальный ответ неверен. Я оставил это ниже для контекста.

На самом деле вся проблема в том, что вам нужно импортировать специальный заголовок в ваш класс 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

Обратите внимание, что я не пробовал это в реальном проекте.

0 голосов
/ 04 октября 2019

Сделать @objc func performTask() общедоступным: @objc public func performTask()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...