Я вырываю волосы, я потратил полтора дня на это. Я думал, что Свифт должен быть легче, но я считаю это кошмаром по сравнению с Objective-C. Я пытаюсь перенести проект на быстрый в течение месяца, и я серьезно подумываю об утилизации его и просто вернусь к Objective-C. Если кто-то может помочь, это будет очень признательно. Ранее я использовал учебник по raywenderlich.com, который дал хороший многоразовый класс IAP. Однако, пытаясь преобразовать это в Swift, я просто сталкиваюсь с проблемами, которые я не могу найти. Некоторые ошибки Xcode дают просто бессмысленно в их описании, а Google мало помогает.В App Purchase с Swift
Во-первых, это подходящий перевод кода? Swift руководство не поможет здесь:
Objective-C
typedef void (^RequestProductsCompletionHandler)(BOOL success, NSArray * products);
Swift
typealias RequestProductsCompletionHandler = (success : Bool, products : NSArray)
Когда я пытаюсь воздействовать на это позже с
_completionHandler(true, skProducts)
Я получаю ошибку
Невозможно преобразовать тип Выражение в '(BooleanLiteralConvertible, [AnyObject]!)' К типу 'BooleanLiteralConvertible'
У меня также есть проблемы с этим
- (id)initWithProductIdentifiers:(NSSet *)productIdentifiers {
if ((self = [super init])) {
// Store product identifiers
_productIdentifiers = productIdentifiers;
// Check for previously purchased products
_purchasedProductIdentifiers = [NSMutableSet set];
for (NSString * productIdentifier in _productIdentifiers) {
BOOL productPurchased = [[NSUserDefaults standardUserDefaults] boolForKey:productIdentifier];
if (productPurchased) {
[_purchasedProductIdentifiers addObject:productIdentifier];
NSLog(@"Previously purchased: %@", productIdentifier);
} else {
NSLog(@"Not purchased: %@", productIdentifier);
}
}
}
return self;
}
Как это должен быть инициатором, я понятия не имею, как его реализовать. Я пытался изменить его на регулярной функции, которую я мог бы назвать после создания объекта, но даже тогда я бегу в проблемы с этим
for productIdentifier in _productIdentifiers {
let productPurchased = NSUserDefaults.standardUserDefaults().boolForKey(productIdentifier)
if productPurchased {
_purchasedProductIdentifiers.addObject(productIdentifier)
}
}
Как утверждает, что NSSet
'NSSet? не имеет члена под названием «Генератор»
Что бы это ни значило. Я также получаю другие случайные ошибки из этой строки о последовательности или что-то в этом роде.
В основном кажется, что слишком много изменилось, и преобразование этого кода в учебник является просто не стартером. На самом деле было бы неплохо увидеть учебник для этого в Swift, но Google не является моим другом. Мне трудно поверить, что ни один пример этого не существует.
Может ли кто-нибудь помочь !? Есть ли учебник для этого? Предпочтительно тот, который устанавливает IAP как отдельный класс многократного использования.
показывают нам, что "skProducts" – CjCoax
функ productsRequest (запрос: SKProductsRequest !, didReceiveResponse ответ: SKProductsResponse) { пусть skProducts = response.products _completionHandler (правда, skProducts) – KelticKoder
для 'NSSet? не имеет члена с именем «Генератор», вам нужно развернуть _productIdentifiers, поэтому вместо «для productIdentifier в _productIdentifiers» вам нужен пользователь «для productIdentifier в _productIdentifiers!». как _productIdentifiers означает нулевую NSSet или NSSet? – CjCoax