简体   繁体   English

ViewController类型不符合协议SKPaymentTransactiionObserver

[英]type ViewController does not conform to protocol SKPaymentTransactiionObserver

I keep getting the error even after inputing the require code. 即使输入了要求代码,我仍然收到错误消息。 What am I missing? 我想念什么?

class ViewController: UIViewController, SKPaymentTransactionObserver, SKProductsRequestDelegate, GADBannerViewDelegate {
    @IBOutlet weak var txtYearlyIncome: UITextField!
    @IBOutlet weak var sldPercentSaved: UISlider!
    @IBOutlet weak var lblPercent: UILabel!
    @IBOutlet weak var lblWeeklySaved: UILabel!
    @IBOutlet weak var lblMonthlySaved: UILabel!
    @IBOutlet weak var lblYearlySaved: UILabel!
    @IBOutlet weak var lblSaved25: UILabel!
    @IBOutlet weak var btnRemoveAds: UIButton!
    @IBOutlet weak var bannerView: GADBannerView!
    @IBOutlet weak var lblAdsRemoved: UILabel!

    var yearlyIncomeString = ""
    var yearlyIncomeFloat : Float = 0.0
    var percent : Float = 0.0
    var weeklySaved : Float = 0.0
    var MonthlySaved : Float = 0.0
    var YearlySaved : Float = 0.0
    var Saved25 : Float = 0.0
    var decimalValue : Float = 0.0
    var product: SKProduct!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.bannerView.adUnitID = "ca-app-pub-3042973809533220/1135061595"
        self.bannerView.rootViewController = self

        let request : GADRequest = GADRequest ()

        self.bannerView.loadRequest (request)
        self.bannerView.hidden = true
        self.bannerView.delegate = self
        btnRemoveAds.hidden = true
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
        let products = response.products
        if (products.count != 0)
        {
            product = products[0] as SKProduct
        }

        btnRemoveAds.hidden = true

        if (NSUserDefaults.standardUserDefaults().objectForKey("Ads") == nil)
        {
            SKPaymentQueue.defaultQueue().addTransactionObserver(self)
            self.getProductInfo();
        }

        if let status: AnyObject! = NSUserDefaults.standardUserDefaults().objectForKey("Ads"){
            if status as! NSString == "purchased" {
                self.bannerView.removeFromSuperview()
                self.btnRemoveAds.hidden = true;
                self.btnRemoveAds.userInteractionEnabled = false
            }
            else {
                SKPaymentQueue.defaultQueue().addTransactionObserver(self)
                self.getProductInfo()
            }
        }
    }

    func getProductInfo(){
        if SKPaymentQueue.canMakePayments(){
            let productID:NSSet = NSSet(object:"smmremoveads")
            let request:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>)
            request.delegate = self
            request.start()
        }

        func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]){
            for transaction:AnyObject in transactions {
                if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{
                    switch trans.transactionState {
                    case .Purchased:
                        SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
                        storePurchase()
                        lblAdsRemoved.text = "Ads Removed!"
                        break
                    case .Failed:
                        SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
                        break
                    case .Restored:
                        SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
                        break
                    default:
                        break
                    }
                }
            }
        }

        func storePurchase () {
            NSUserDefaults.standardUserDefaults().setObject("purchased", forKey: "Ads")
            self.bannerView.removeFromSuperview()
            self.btnRemoveAds.hidden = true
            self.btnRemoveAds.enabled = false
            lblAdsRemoved.text = "Ads Removed"
        }
    }

    @IBAction func sldPercentSavedACTION(sender: UISlider) {
        takeINData()
        calculate()
    }

    @IBAction func btnRemoveAdsACTION(sender: UIButton) {
    }

    @IBAction func btnClearACTION(sender: UIButton) {
        clear()
    }

    func takeINData () {
        if txtYearlyIncome.text == ""{
            txtYearlyIncome.text = "10000"
        }

        yearlyIncomeString = txtYearlyIncome.text!
        yearlyIncomeFloat = Float(yearlyIncomeString)!
        percent = sldPercentSaved.value
    }

    func calculate () {
        YearlySaved = yearlyIncomeFloat * percent
        MonthlySaved = YearlySaved / 12
        weeklySaved = YearlySaved / 52
        Saved25 = YearlySaved * 25
        print()
    }

    func print () {
        percent = percent * 100

        let sPercent = String(format: "%0.0f", percent)
        let sWeekly = String(format: "%0.0f", weeklySaved)
        let sMonthly = String(format: "%0.0f", MonthlySaved)
        let sYearly = String(format: "%0.0f", YearlySaved)
        let sSaved25 = String(format: "%0.0f", Saved25)

        lblPercent.text! = "\(sPercent)%"
        lblWeeklySaved.text = "$\(sWeekly)"
        lblMonthlySaved.text = "$\(sMonthly)"
        lblYearlySaved.text! = "$\(sYearly)"
        lblSaved25.text = "$\(sSaved25)"
    }

    func clear () {
        txtYearlyIncome.text! = ""
        lblWeeklySaved.text = "$"
        lblMonthlySaved.text = "$"
        lblYearlySaved.text! = "$"
        lblSaved25.text = "$"

        lblPercent.text! = "0%"
    }

    func hideKeyboard () {
        txtYearlyIncome.resignFirstResponder()
    }

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
      hideKeyboard()
    }

    func round () {

    }
}

It looks to me like you have a missing closing brace, but it's hard to tell because your code is formatted poorly (I'll fix that for you in a moment!) 在我看来,您似乎缺少一个右括号,但是很难说出来,因为您的代码格式不正确(我会稍后为您解决!)

The problem is here: 问题在这里:

func getProductInfo() {
    if SKPaymentQueue.canMakePayments() {
        let productID:NSSet = NSSet(object:"smmremoveads")
        let request:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>)
        request.delegate = self
        request.start()
       }

    func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]){
        for transaction:AnyObject in transactions {

Note how getProductInfo opens two braces ({) and closes only one? 请注意, getProductInfo如何打开两个大括号({)而仅关闭一个大括号? That's the problem: you need a second } before func paymentQueue . 这就是问题所在:在func paymentQueue之前,您需要第二个}。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 类型“ ViewController”不符合协议 - Type 'ViewController' does not conform to protocol 类型“ ViewController”不符合协议“ FBSDKLoginButtonDelegate” - The type 'ViewController' does not conform to protocol 'FBSDKLoginButtonDelegate' 类型“ ViewController”不符合协议“ UITableViewDataSource” - Type “ViewController” does not conform to protocol 'UITableViewDataSource" 类型“ViewController”不符合协议“UITableViewDataSource” - Type 'ViewController' does not conform to protocol 'UITableViewDataSource' 类型“ ViewController”不符合协议“ UITableViewDataSource” - Type'ViewController' does not conform to protocol 'UITableViewDataSource' 类型“ ViewController”不符合协议“ UITableViewDataSource” - Type 'ViewController' does not conform to protocol 'UITableViewDataSource' Swift:类型&#39;ViewController&#39;不符合协议&#39;UIPageViewControllerDataSource&#39; - Swift: Type 'ViewController' does not conform to protocol 'UIPageViewControllerDataSource' 类型“ viewController”不符合协议“ PathMenuDelegate” - type “viewController” does not conform protocol “PathMenuDelegate” 类型的viewcontroller不符合协议uitableviewdatasource - type viewcontroller does not conform to protocol uitableviewdatasource 类型&#39;ViewController&#39;不符合协议&#39;UICollectionViewDataSource&#39; - Type 'ViewController' does not conform to protocol 'UICollectionViewDataSource'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM