首页 > 代码库 > Swift function how to return nil

Swift function how to return nil

  这两天在学习Stanford出品的iOS7的课程,这个课程去年也看过,但是看到第3课就不行了,满篇的OC,把人都搞晕了。这段时间因为要写个iOS的App,正好赶上了Swift问世,所以趁着这股劲继续学习iOS的开发,把网上的一些视频关于Swift的都看过和做过了,然后选择看Stanford出品的这个视频,把里面OC实现的代码用Swift实现一遍自己还是觉得比较有意义的,而且还能补充点iOS系统方面的知识。

  一切本都还顺利,在看到第三课,有段代码遇到点问题

代码如下:

这一段通过牌堆Deck抽取一张牌card,当card为非nil时显示内容,问题就处在card的返回值。

代码1:

var card:Card? = playDec.drawRandomCard()if card{    sender.setBackgroundImage(UIImage(named: "cardfront"),                    forState: UIControlState.Normal)    sender.setTitle(card!.contents, forState: UIControlState.Normal)}

下面是如何随机抽取card的过程。

代码2:

    func drawRandomCard() -> Card{        var randomCard: Card?        var count = cards.count        var temp = count + 1                        if(count != 0){            println("drawRandomCards------cards.count-\(count)")            var index:Int = Int(arc4random_uniform(UInt32(count)))            println("drawRandomCards------arc4random \(index)")                       println("drawRandomCard------index-\(index)")            randomCard  = cards[index]            cards.removeAtIndex(index)        }        return randomCard!    }

  当count==0的时候,牌堆中没有牌,则函数返回nil,然后就代码1就得到一个nil的card,从而不现实内容。以前写java的时候这样没问题,但是Swift就不行了。因为引入了optional value的概念,此时非要return randomCard!   这个“!”表示randomCard不为空。这不就扯了,我要返回空,你却强制要非空。。

  那肯定有解决方案咯,代码2 的函数模板是 ()->card  这里可以看到,card不是optional value,所以必须为非空,所以想返回空值必须在card后面加个?,表示,可能为空。所以正确的代码是:

代码3:

    func drawRandomCard() -> Card?{        var randomCard: Card?        var count = cards.count        var temp = count + 1                        if(count != 0){            println("drawRandomCards------cards.count-\(count)")            var index:Int = Int(arc4random_uniform(UInt32(count)))            println("drawRandomCards------arc4random \(index)")                       println("drawRandomCard------index-\(index)")            randomCard  = cards[index]            cards.removeAtIndex(index)        }        return randomCard    }

这样就OK了,程序正常运行~~