Я столкнулся с проблемой доступа к переменным класса, написанного на 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 не имеет доступных переменных для использования.