我是swift的新手,我只是想知道是否有辦法在NSObject類中聲明一些委託協議並在UIViewController類中調用它們。我試過這樣做,它會導致運行時異常。我的代碼在下面的類中。在NSObject類中設置協議,並在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方法應該引起與會代表,但它沒有發生,我沒有得到什麼,我在這裏失蹤。幫助將非常感激。