iOS8开发~Swift(四)理解?和!
2014-06-09 19:32
387 查看
一、概述
在上一篇UI详解中,已经接触了不少的代码,其中有这样的代码实现:
现在的问题是: var window: UIWindow? 中的?号如何理解? self.window!.backgroundColor中的!号如何理解?
这一篇详述这个问题。
二、Swift中的?和!
首先看《The Swift Programming Language》中是这样说的:
意思就是说,类都属性值在使用前必须要初始化,初始化可以以下几种方法:
1、声明属性变量时候直接赋值初始化
2、在构造函数中初始化
3、声明为optional类型
声明成optional类型很简单,只需要在变量后边加上 ?就可以了
《The Swift Programming Language》中是这样说的:
将变量声明成optional类型,如果变量没有初始化,就会被自动设置成nil没当然Swift中的nil于OC中的不同,Swift中nil上确定一种类型的值,OC中的nil上一个空指针。
optional类型可以看成普通变量的再次包装,既然包装了一次,那使用这个变量的时候就要解开包装,就用!解开。
!符号的使用方法上,如果确认一个optional类型的变量上一个有效的值,那就解包,如果直接!一个变量,如果变量是nil,那就发生错误了。!符号在文档中这么描述的:unwrapped optional
其实解包不仅仅只有!一种办法,看下面代码,两种解包效果效果是一样的:
第二种方法,文档中叫“optional binding”
当然,如果第一种方法中,不加if (self.data) 判断,如果self.data为nil,那就会出错了。
理解了?和!的作用之后,还可以灵活运用:例如官网代码:
由于对官网文档的理解可能不到位,可能对问题的理解有偏差,如果发现错误,还请指正,不胜感激。更多内容请点击这里
欢迎加入群共同学习和进步:QQ群:170549973
在上一篇UI详解中,已经接触了不少的代码,其中有这样的代码实现:
class AppDelegate: UIResponder, UIApplicationDelegate, UITabBarControllerDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool { self.window = UIWindow(frame: UIScreen.mainScreen().bounds) self.window!.backgroundColor = UIColor.whiteColor() self.window!.makeKeyAndVisible() return true }
现在的问题是: var window: UIWindow? 中的?号如何理解? self.window!.backgroundColor中的!号如何理解?
这一篇详述这个问题。
二、Swift中的?和!
首先看《The Swift Programming Language》中是这样说的:
意思就是说,类都属性值在使用前必须要初始化,初始化可以以下几种方法:
1、声明属性变量时候直接赋值初始化
class CustonObjectA : NSObject { var data: NSArray = [] var name: NSString = "" }
2、在构造函数中初始化
class CustonObject : NSObject { var data: NSArray var list: <span style="font-family: Arial, Helvetica, sans-serif;">NSArray</span> init(data: NSArray, list: NSArray) { self.data = data; self.list = list; } deinit { } }
3、声明为optional类型
声明成optional类型很简单,只需要在变量后边加上 ?就可以了
class CustonObjectB : NSObject { var data: NSArray? var name: NSString? }
《The Swift Programming Language》中是这样说的:
将变量声明成optional类型,如果变量没有初始化,就会被自动设置成nil没当然Swift中的nil于OC中的不同,Swift中nil上确定一种类型的值,OC中的nil上一个空指针。
optional类型可以看成普通变量的再次包装,既然包装了一次,那使用这个变量的时候就要解开包装,就用!解开。
!符号的使用方法上,如果确认一个optional类型的变量上一个有效的值,那就解包,如果直接!一个变量,如果变量是nil,那就发生错误了。!符号在文档中这么描述的:unwrapped optional
其实解包不仅仅只有!一种办法,看下面代码,两种解包效果效果是一样的:
class CustonObjectB : NSObject { var data: NSArray? var name: NSString? func customMethod() { if (self.data) { let count = self.data!.count } // 第一种 implicitly unwrapped optional if let arr = self.data { let countEx = arr.count } // 第二种 implicitly unwrapped optional } }
第二种方法,文档中叫“optional binding”
当然,如果第一种方法中,不加if (self.data) 判断,如果self.data为nil,那就会出错了。
理解了?和!的作用之后,还可以灵活运用:例如官网代码:
由于对官网文档的理解可能不到位,可能对问题的理解有偏差,如果发现错误,还请指正,不胜感激。更多内容请点击这里
欢迎加入群共同学习和进步:QQ群:170549973
相关文章推荐
- iOS8开发~Swift 理解?和!
- iOS8开发~Swift(三)UI详解
- ios8 swift开发:显示变量的类名称
- IOS8 开发之Swift - 自学之路(第一天)
- iOS:iOS8开发 深入理解autolayout(3)
- iOS8开发~UI布局(三)深入理解autolayout
- iOS8开发~Swift(一)入门
- swift开发之try.. catch的理解与使用
- IOS8开发之:基于Swift实战UI从入门到精通(5大项目、深入解析拉手团购项目)
- iOS8开发~UI布局(三)深入理解autolayout
- iOS8开发~UI布局(三)深入理解autolayout
- ios8 swift开发:let var 区别讨论
- iOS8开发~UI布局(三)深入理解autolayout
- iOS8开发~UI布局(三)深入理解autolayout
- iOS8开发~UI布局(三)深入理解autolayout
- iOS:iOS8开发(三)~深入理解autolayout
- iOS8开发~Swift(五)Swift与OC混编
- iOS8开发~Swift(五)Swift与OC混编
- iOS8开发~Swift(VS)Objective-C
- IOS8 开发之Swift - 自学之路(第三天)