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

  • 相关阅读:
    (转)如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1
    Git 常用命令(转)
    (转)iphone常用控件之UIScrollView 不错收藏记录一下
    (转) copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
    设计一个移动应用的本地缓存机制(转)
    让表格对角线上的表格变色
    DevExpress XtraReports 入门一 创建 Hello World 报表
    DevExpress XtraReports 入门三 创建 MasterDetail(主/从) 报表
    DevExpress XtraReports 入门二 创建 dataaware(数据感知) 报表
    自己搜集的一些资料(只是一些链接而已)
  • 原文地址:https://www.cnblogs.com/scaptain/p/3849518.html
Copyright © 2020-2023  润新知