#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. Для меня похоже, что у вас есть локальные переменные и переменные экземпляра / класса с одинаковыми именами