【发布时间】:2014-11-07 18:54:09
【问题描述】:
我正在尝试将我所有的 IAP 代码放在一个名为 iapController 的类中,并将其放在 main.swift 中。代码如下:
class iapController: UIViewController, SKPaymentTransactionObserver, SKProductsRequestDelegate {
var product:SKProduct!
class func offerUnlockLevels() {
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
getProductInfo()
let payment:SKPayment = SKPayment (product: product)
SKPaymentQueue.defaultQueue().addPayment(payment)
}
func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) {
for transaction:AnyObject in transactions {
if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction {
switch trans.transactionState {
case .Purchased:
println("inside purchased")
self.openAllLevels()
SKPaymentQueue.defaultQueue().finishTransaction(transaction as SKPaymentTransaction)
break
case .Failed:
println("inside failed")
SKPaymentQueue.defaultQueue().finishTransaction(transaction as SKPaymentTransaction)
break
case .Restored:
println("inside restored")
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
break
default:
break
}
}
}
}
func openAllLevels() {
println("inside openAllLevels()")
unlockAllLevelsButton.hidden = true
for var i=0; i<20; i++ {
levelCollectionButtons[i].setBackgroundImage(nil, forState: .Normal)
}
}
func productsRequest (request: SKProductsRequest!, didReceiveResponse response: SKProductsResponse!) {
let products = response.products
println(products)
if products.count != 0
{
product = products[0] as SKProduct
println(product.localizedTitle + "\n" + product.localizedDescription)
}
}
func getProductInfo() { //Checks if user can make IAP (has itunes account)
if (SKPaymentQueue.canMakePayments()) {
let productID:NSSet = NSSet(object: "Zero.UnlockAllLevels") //Hold our product ID
let request:SKProductsRequest = SKProductsRequest(productIdentifiers: productID)
request.delegate = self
request.start()
}
}
}
请注意,我将 offerUnlockLevels() 设为类级别函数,因为我想从其他视图控制器调用它。但是我收到错误:类型 iapController.Type 不符合协议 'SKPaymentTransactionObserver'
如果我不将其设为类级函数,我将无法从其他视图控制器类中调用此函数。我做错了什么?
【问题讨论】: