Swift 2迁移问题 [英] Swift 2 migration problems

查看:78
本文介绍了Swift 2迁移问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚在Xcode 7 beta中打开了我的旧项目。代码在Xcode 6中运行得非常好,但现在它显示了很多错误。我不知道那些是什么。有人可以解释为什么会发生这种情况,以及如何解决它?谢谢!这是代码

I just opened my old project in Xcode 7 beta. The code works perfectly fine in Xcode 6, but now it's showing many error. I don"t know what those are. Can anybody explain why this happened, and how to fix it? Thank you! Here is the Code

import UIKit
import AVFoundation
class ViewController: UIViewController {

    var player: AVAudioPlayer = AVAudioPlayer()
    @IBOutlet weak var firstCardImageView: UIImageView!
    @IBOutlet weak var secondCardImageView: UIImageView!
    @IBOutlet weak var label: UILabel!


    var cardNamesArray:[String] = ["dice1","dice2","dice3","dice4","dice5","dice6"]
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

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

    @IBAction func rollaction(sender: AnyObject) {
        updateAction()
    }

    func updateAction(){
        var firstRandomNumber = Int(arc4random_uniform(5))
        var firstCardString:String = String(self.cardNamesArray[firstRandomNumber])
        var secondRandomNumber = Int(arc4random_uniform(5))
        var secondCardString:String = String(self.cardNamesArray[secondRandomNumber])

        self.firstCardImageView.image = UIImage(named: firstCardString)
        self.secondCardImageView.image = UIImage(named: secondCardString)



        var fileLocation = NSBundle.mainBundle().pathForResource("sound", ofType: ".mp3")

        var error: NSError? = nil

        player = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: fileLocation!), error: &error) //Error: Cannot find an initializer for type 'AVAudioPlayer' that accepts an argument list of type '(contentsOfURL: NSURL, error: inout NSError?)'

        AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, error: nil) //Error:Extra argument 'error' in call
        AVAudioSession.sharedInstance().setActive(true, error: nil) //Error:Extra argument 'error' in call
        player.play()


        let num = firstRandomNumber + secondRandomNumber + 2
        self.label.text = "The sum is \(num)"
    }


       override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent) {

        if event.subtype == UIEventSubtype.MotionShake { //Error:Method does not override any method from its superclass


            updateAction()


        }
    }


}


推荐答案

这是使用Swift 2.0的do / try / catch实现的updateAction()函数:

Here's your updateAction() function with Swift 2.0's do/try/catch implementation:

func updateAction(){
    var firstRandomNumber = Int(arc4random_uniform(5))
    var firstCardString:String = String(self.cardNamesArray[firstRandomNumber])
    var secondRandomNumber = Int(arc4random_uniform(5))
    var secondCardString:String = String(self.cardNamesArray[secondRandomNumber])

    self.firstCardImageView.image = UIImage(named: firstCardString)
    self.secondCardImageView.image = UIImage(named: secondCardString)

    let fileLocation = NSBundle.mainBundle().pathForResource("sound", ofType: ".mp3")

    do {
        player = try AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: fileLocation!))

        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
        try AVAudioSession.sharedInstance().setActive(true)
    }
    catch {
        print("Something bad happened. Try catching specific errors to narrow things down")
    }

    player.play()

    let num = firstRandomNumber + secondRandomNumber + 2
    self.label.text = "The sum is \(num)"
}

这篇关于Swift 2迁移问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆