• 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了,程序正常运行~~

  • 相关阅读:
    老毛桃PE修改方法(屏蔽更改主页,屏蔽加装的绿色浏览器)
    老毛桃winpe优盘启动系统个性修改全攻略
    SQL2000和SQL2005和SQL2008同时安装问题
    基于FFmpeg的音频编码(PCM数据编码成AAC android)
    springboot + mybatis +easyUI整合案例
    spring thymeleaf 自定义标签
    速度挑战
    兼顾pc和移动端的textarea字数监控的实现方法
    CSS3+JS 实现的便签应用
    JavaScript实现碰撞检测(分离轴定理)
  • 原文地址:https://www.cnblogs.com/scaptain/p/3849518.html
Copyright © 2020-2023  润新知