Конструкторы каждого класса в SDK (написанные на objective-c и импортированные в swift через связующий заголовок) возвращают nil

#objective-c #swift #constructor #bridging-header

#objective-c #swift #конструктор #соединительный заголовок

Вопрос:

Отказ от ответственности: у меня нет никакого опыта работы со Swift. Проблема может быть такой же простой, как пропущенная запятая, и я все равно не знаю.

Вот как я создаю объект:

 var request: PaymentRequest?
request = PaymentRequest()
  

Я также пробовал это:

 var request = PaymentRequest()
  

Второй вариант, похоже, каким-то образом задерживает проблему. Вместо того, чтобы сразу показывать нулевое значение, он делает вид, что создает экземпляр с адресом памяти 0x0000000000000000 , и приложение по-прежнему падает дальше по коду:

         // This is OK
        request.add("some key", "some value")
        ...
        request.add("some key", "some value")
        let services = PaymentService()
        let response = services.process(request)

        // Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
        let responseCode = response.get("Response.StatusCode")
  

Вот как PaymentRequest.h выглядит:

 #import <Foundation/Foundation.h>
@interface PaymentRequest : NSObject
@property (strong,nonatomic)NSString *userInterface;
@property (strong,nonatomic)NSMutableDictionary *authenticationToken;
@property (nonatomic,strong)NSMutableDictionary *keyValueDictionary;
  (PaymentRequest *)sharedManager;
- (void)add :(NSString *)key :(NSString *)value;
- (void)setPaymentType :(NSString *)value;
- (void)setPaymentAuthenticationToken :(NSString *)key valueForKey:(id)value;
- (void)isLogging :(BOOL)userValue;
@end
  

Поскольку я не был уверен, как работают связующие заголовки, я попытался импортировать каждый заголовок в SDK вместо только тех, которые мне были нужны, но это тоже не помогло.

Комментарии:

1. Похоже, PaymentRequest является синглтоном. Попробуйте PaymentRequest.sharedManager()

2. let request = PaymentRequest.sharedManager() возвращает nil при первом обращении к request (если я не использую метод неправильно). Тем не менее, нет смысла, чтобы класс, представляющий веб-запрос, был одноэлементным, не так ли?

3. Хороший момент. Синглтон здесь на самом деле не имеет смысла.

4. Для меня похоже, что у вас есть локальные переменные и переменные экземпляра / класса с одинаковыми именами