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 +
if(count != ){
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 +
if(count != ){
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了,程序正常运行~~
Swift function how to return nil的更多相关文章
- console.log((function f(n){return ((n > 1) ? n * f(n-1) : n)})(5))调用解析
console.log((function f(n){) ? n * f(n-) : n)})()); 5被传入到函数,函数内部三元计算,5 > 1成立,运算结果是5*f(4),二次运算,5*4 ...
- .sort(function(a,b){return a-b});
var points = [40,100,1,5,25,10]; var b= points.sort(function(a,b){return a-b}); console.log(b); 那个fu ...
- Flask - 访问返回字典的接口报错:The view function did not return a valid response. The return type must be a string, tuple, Response instance, or WSGI callable, but it was a dict.
背景 有一个 Flask 项目,然后有一个路由返回的是 dict 通过浏览器访问,结果报错 关键报错信息 TypeError: 'dict' object is not callable The vi ...
- [C++] - GCC和LLVM对方法 warning: non-void function does not return a value [-Wreturn-type] 的处理差异
最近做一个C++开源项目发现一个奇怪问题,通过clang编译链接执行程序每到有一个就崩溃了,gcc下则没有此问题. 后来通过调试,发现原因是bool返回的方法是没有return语句!问题是为啥还能通过 ...
- swift textfiled 输入完毕 return 隐藏键盘 方法
学习swift 真是件头疼的事情 会的人少,又没有OC基础,所以 且学切珍惜吧. 在做登录的时候发现textfiled 自动调用键盘后不能隐藏?头疼 ~~~~询问了好多人 终于有人自写解答 为了方便后 ...
- SWIFT Function
Swift中的函数跟JAVA语言的函数差不多,但也有差别,SWIFT中定义函数可以指定参数的名称这也是别的语言没有的,好处就是增加了可读性.其返回值是放在未尾的,如以下定义一个加法器: func ad ...
- Swift #function 和 _cmd (Objective-C)
NSStringFromSelector(_cmd); // Objective-C print(__FUNCTION__) // Swift 2 print(#function) // Swift ...
- 关于一个function abc() 内 return一个值, 或者多个值写法
1.想return一个值,选第一种写法 function abc(){ a = '我是adad' return a } console.log(abc) // ==> 这个是错的,不要这样写,经 ...
- Function overloading and return type
In C++ and Java, functions can not be overloaded if they differ only in the return type. For example ...
随机推荐
- LARGE_INTEGER
#include <windows.h> int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR ipCm ...
- 深入了解Qt(三)之元signal和slot
深入了解Qt主要内容来源于Inside Qt系列,本文做了部分删改,以便于理解.在此向原作者表示感谢! 在Qt 信号和槽函数这篇文章中已经详细地介绍了信号和槽的使用及注意事项.在这里对其使用方面的知识 ...
- php 导出csv
public function doworks(){ //输出Excel文件头,可把user.csv换成你要的文件名 header('Content-Type: appli ...
- hdu1505
the main algorithm as the 1506 #include <stdio.h> #include <iostream> #include <strin ...
- .NET Framework 中的字符编码
字符是可用多种不同方式表示的抽象实体. 字符编码是一种为受支持字符集中的每个字符进行配对的系统,配对时使用的是表示该字符的某些值. 例如,摩尔斯电码是一种为罗马字母表中的每个字符进行配对的字符编码,配 ...
- [视频]MAC OS 技巧之如何更新及重装MAC系统
mac os是当今最好用的桌面操作系统,但再好的系统也有新版本发布的一天,或者被极客的你尝试各种设置而配置混乱了,这时我们就要进行系统更新或者重装了. 系统更新 Mac OS有新版本推出时,会自动在A ...
- Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)
E文好的可以直接看https://github.com/loresoft/EntityFramework.Extended 也可以在nuget上直接安装这个包 1.先更新VS的NuGet版本http: ...
- Vue.js学习 Item8 -- 方法与事件处理器
方法处理器 可以用 v-on 指令监听 DOM 事件: <div id="example"> <button v-on:click="greet&quo ...
- 小菜的系统框架界面设计-灰姑娘到白雪公主的蜕变(工具条OutLookBar)
灰姑娘本身也有自已的优点,但是却可能因为外貌不讨人喜欢,要变成白雪公主却需要有很多勇气和决心去改变自已: 有一颗善良的心 讨人喜爱的外貌 --蜕变--> 我这里讲的是一个工具条的蜕变过程, ...
- phpQuery采集微信公众号文章乱码
终于找到解决方案了,这是一个值得庆祝的事情.... 原来是因为微信在源码中加入了防采集代码<!--headTrap<body></body><head>< ...