gpt4 book ai didi

ios - 在 NSObject 类中设置协议(protocol)并在 UIViewController 类中调用它们

转载 作者:行者123 更新时间:2023-11-30 12:17:34 25 4
gpt4 key购买 nike

我是 swift 新手,我只是想知道是否有一种方法可以在 NSObject 类中声明一些委托(delegate)协议(protocol)并在 UIViewController 类中调用它们。我尝试这样做,但它引发了运行时异常。我在类中的代码如下。

NSObject 类

import UIKit
import StoreKit
class InAppPurchase: NSObject, SKProductsRequestDelegate, SKPaymentTransactionObserver {
var productsList = [SKProduct]()
var productToPurchase = SKProduct()
var productID = ""
let PURCHASE_ID_PREFIX = "com.aux.ApplePaySample."


public func initPayment (productID: String) {
self.productID = PURCHASE_ID_PREFIX + productID
print("Initializing Purchase Product ID: \(self.productID)")
if SKPaymentQueue.canMakePayments() {
let productID: NSSet = NSSet(objects: self.productID)
let request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>)
request.delegate = self
request.start()
}else {
print("In App Purchases not enabled")
}
}

func buyProduct() {
let payment = SKPayment(product: productToPurchase)
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().add(payment as SKPayment)
}


public func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
let myProducts = response.products
for product in myProducts {
print("\(product.productIdentifier) \(product.price) \(product.localizedDescription)")
productsList.append(product)
}

for product in productsList {
let productID = product.productIdentifier
if productID == self.productID {
productToPurchase = product
buyProduct()
}
}

}
}

UIViewController类

import UIKit
import StoreKit

class InAppViewController: UIViewController{
@IBOutlet var buyButton: UIButton!
// SKProductsRequestDelegate, SKPaymentTransactionObserver
let defaults = UserDefaults.standard
var product_id: NSString?
override func viewDidLoad() {
super.viewDidLoad()

InAppPurchase().initPayment(productID: "101")
}

从技术上讲,我的 initPayment 方法应该触发委托(delegate),但它没有发生,而且我没有得到我在这里缺少的东西。非常感谢您的帮助。

最佳答案

应该创建一个实例,如下所示

static var shared:InAppPurchase = {
return InAppPurchase()
}()

关于ios - 在 NSObject 类中设置协议(protocol)并在 UIViewController 类中调用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45199006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com