Ios 使用SKProductsRequest时,值类型未桥接到Objective-C错误-运行时错误
我以前能够在iOS应用程序中设置应用程序内购买,但是当回到项目并迁移到Swift 3时,我收到一个运行时错误,控制台中没有错误,但我看到了 值类型未桥接到Objective-C错误 这是我请求产品时的以下功能Ios 使用SKProductsRequest时,值类型未桥接到Objective-C错误-运行时错误,ios,swift,swift3,storekit,Ios,Swift,Swift3,Storekit,我以前能够在iOS应用程序中设置应用程序内购买,但是当回到项目并迁移到Swift 3时,我收到一个运行时错误,控制台中没有错误,但我看到了 值类型未桥接到Objective-C错误 这是我请求产品时的以下功能 //Request Products func requestProductInfo() { if SKPaymentQueue.canMakePayments() { let productIdentifiers = NSSet(array: productI
//Request Products
func requestProductInfo() {
if SKPaymentQueue.canMakePayments() {
let productIdentifiers = NSSet(array: productIDs)
//ERROR
let productRequest = SKProductsRequest(productIdentifiers: productIdentifiers as! Set<String>)
productRequest.delegate = self
productRequest.start()
}
else {
print("Cannot perform In App Purchases.")
}
}
//请求产品
func requestProductInfo(){
如果SKPaymentQueue.canMakePayments(){
让productIdentifiers=NSSet(数组:productId)
//错误
让productRequest=SKProductsRequest(productIdentifiers:productIdentifiers as!Set)
productRequest.delegate=self
productRequest.start()
}
否则{
打印(“无法执行应用内购买”)
}
}
有人知道发生了什么吗?我知道使用Swift数组和NSSet可能会出现一些问题,但我尝试过改变,但仍然会出现错误
var productIDs: Array<String?> = []
var productsArray = [SKProduct]()
func transactionAction() {
let payment = SKPayment(product: self.productsArray[self.selectedProductIndex] as SKProduct)
SKPaymentQueue.default().add(payment)
self.transactionInProgress = true
}
//Request Products
func requestProductInfo() {
if SKPaymentQueue.canMakePayments() {
let productIdentifiers = NSSet(array: productIDs)
let productRequest = SKProductsRequest(productIdentifiers: productIdentifiers as! Set<String>)
productRequest.delegate = self
productRequest.start()
}
else {
print("Cannot perform In App Purchases.")
}
}
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
if response.products.count != 0 {
// print("\(response.products.map {p -> String in return p.localizedTitle})")
productsArray = response.products
}
else {
print("There are no products.")
}
if response.invalidProductIdentifiers.count != 0 {
print("\(response.invalidProductIdentifiers.description)")
}
print("Number of products in productsArray \(productsArray.count) - Number of products in productIDs \(productIDs.count)")
setPurchaseButton()
}
var-productIDs:Array=[]
var productsArray=[SKProduct]()
func transactionAction(){
let payment=SKPayment(产品:self.productsArray[self.selectedProductIndex]作为SKProduct)
SKPaymentQueue.default().add(付款)
self.transactionProgress=true
}
//请求产品
func requestProductInfo(){
如果SKPaymentQueue.canMakePayments(){
让productIdentifiers=NSSet(数组:productId)
让productRequest=SKProductsRequest(productIdentifiers:productIdentifiers as!Set)
productRequest.delegate=self
productRequest.start()
}
否则{
打印(“无法执行应用内购买”)
}
}
func productsRequest(uRequest:SKProductsRequest,didReceive response:SKProductsResponse){
如果response.products.count!=0{
//打印(\(response.products.map{p->String in return p.localizedTitle})
productsArray=response.products
}
否则{
打印(“没有产品”)
}
如果response.invalidProductIdentifiers.count!=0{
打印(“\(response.invalidProductIdentifiers.description)”)
}
打印(“productsArray\(productsArray.count)中的产品数)-ProductId\(ProductId.count)中的产品数)
setPurchaseButton()
}
您是否尝试过更改此行:
var productIDs: Array<String?> = []
如果需要将
Set
传递给方法,最好不要使用中间NSSet
。Swift 3最糟糕的新功能,就像任何一个一样,都会带来灾难性的后果。天哪,我真不敢相信我没有看到这一点,是的,现在一切都正常了;谢谢@在Swift的旧版本中,将一组选项传递给ObjC端会导致编译时错误。但对于任何新的id特性,程序员都需要格外小心。ObjC集合的值类型作为Any
导入到Swift端,Swift端实际上消耗任何东西。Swift已成为一种类型安全的语言。。。小心,祝你和你的应用程序好运。
var productIDs: Array<String> = []
let productIdentifiers = Set(productIDs)
let productRequest = SKProductsRequest(productIdentifiers: productIdentifiers)