Невозможно использовать переменные объекта Swift в Objective-C View Controller - PullRequest
0 голосов
/ 01 июля 2018

Я столкнулся с проблемой доступа к переменным класса, написанного на Swift, из контроллера представления, написанного на Objective-C.

Я уже создал заголовок моста и успешно отправил объект Swift с контроллера представления, написанного на Swift, на другой объект, написанный на Objective-C. Проблема в том, что я хочу получить доступ к переменным объекта, но я получаю следующую ошибку: Не удается найти свойство 'variableName' в объекте прямого класса 'className' .

Вот класс, к которому я пытаюсь получить доступ к его переменным:

import Foundation
import UIKit
import SwiftyJSON

@objcMembers
class SwiftObject: NSObject {

    // MARK: - Variables
    var id: String
    var name: String
    var contact: SwiftSubObjectA
    var location: SwiftSubObjectB
    var categories: [SwiftSubObjectC] = []

    // MARK: - Initializers
    init(withJSON json: JSON) {
        self.id = json["id"].stringValue
        self.name = json["name"].stringValue
        self.contact = SwiftSubObjectA(withJSON: json["contact"])
        self.location = SwiftSubObjectB(withJSON: json["location"])

        for categoryJSON in json["categories"].arrayValue {
            categories.append(SwiftSubObjectC(withJSON: categoryJSON))
        }

    }

}

И вот как я отправляю объект в контроллер представления Objective C

class SwiftViewController: UIViewController {

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        guard let objectiveVC.object = segue.destination as? ObjectiveViewController else { return }
        guard let object = sender as? SwiftObject else { return }
        objectiveVC.object = object
    }

}

Наконец, это файл .h контроллера представления Objective C:

#import <UIKit/UIKit.h>
@class SwiftObject;

@interface ObjectiveViewController : UIViewController

@property (strong, nonatomic) SwiftObject * _Nonnull object;

@end

и файл .m:

#import "ObjectiveViewController.h"
#import "Project-Bridging-Header.h"

@interface ObjectiveViewController ()

@end

@implementation ObjectiveViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"%@", self.object.name);
    // Do any additional setup after loading the view.
}

@end

Проблема в том, что self.object не имеет доступных переменных для использования.

1 Ответ

0 голосов
/ 01 июля 2018

Чтобы получить доступ к объекту Swift в вашем классе Objective-C, вам нужно импортировать Project-Swift.h в ваш файл .m, как показано ниже

#import "Project-Swift.h"

@implementation ObjectiveViewController 

//... other code

@end

Проект - это название проекта. Добавьте оператор импорта в ваш ObjectiveViewController.m файл

Надеюсь, это поможет

...