Object-C--->Swift之(二)可选类型

可选和nil的恋情

    先看一个例子吧!
    let str="hello world"
    let num:Int=Int(str)

这两行代码的意思str字符串转换成Int类型,嘿嘿!这不是坑计算机吗?hello world能转换成Int类型的数字吗?很显然不能,而且我们运行都不会通过的!

可是我们把第二行代码换成

   let num:Int?= Int(str)

编译就通过了!就这样可选类型就呼之欲出!

定义:

在任何类型后面紧跟一个?就可以代表可选类型,可选类型的变量可用于处理“值缺失”的情况。

Int类型的变量或常量只能接受Int类型的数据,而Int?可以接受值缺失的状况,也就是能接受值为nil。

     var age:Int=nil  这个显然是错误的
     var age:Int?=nil 这个是可以的

注意:Int?和Int类型并不是相同的类型,程序不能直接把Int?类型的变量或者常量直接拿来当Int类型的变量或常量使用。

强制解析

为了获取可选类型的常量或变量的实际存储值需要用在后面加!进行解析。这个!的含义是:已经知道该可选变量有值了(要是实际里面没有值系统就会崩溃),提取里面的值。这种添加感叹号进行解析的用法叫做强制解析。

    例如:
    let str1:String?="hello"
    let str2:String?=" word"
    let result = str1! + str2!
    print(result)

之前说了使用!的前提是可选变量确实有值了,否则就会崩溃,所以我们需要提前判断可选类型是否有值。所以上面的代码这样写才正规一些:

 let str1:String?="hello"
 let str2:String?=" word"
  if str1 != nil && str2 != nil
    {
    let result = str1! + str2!
        print(result)
    }
    else
    {
    print("str1或者str2为nil,不能强制解析")
    }
  }

隐式可选类型

除了在任意已有类型后面添加?来表示可选类型外,可以加!来表示可选类型。
其中Int?和Int! 类型的区别在于:当用Int?表示可选类型的时候必须用!后缀强制解析,而程序用!类型表示可选变量时,无需在后面增添!后缀执行强制解析。Swift会自动执行隐式解析。

   let str1:String!="hello"
   let str2:String!=" word"
    if str1 != nil && str2 != nil
    {
    let result = str1 + str2
        print(result)
    }
    else
    {
    print("str1或者str2为nil,不能强制解析")
    }

最后用一个表清晰展示下可选类型的差异吧!

Int Int? Int!
是否可存储整数
是否接受nil
是否需要强制解析为Int
时间: 2024-11-30 12:59:17

Object-C--->Swift之(二)可选类型的相关文章

Swift中使用可选类型完美解决占位问题

  这篇文章主要介绍了Swift中使用可选类型完美解决占位问题,本文讲解了为Dictionary增加objectsForKeys函数.Swift中更简便的方法.内嵌可选类型等内容,需要的朋友可以参考下 可选类型是Swift中新引入的,功能很强大.在这篇博文里讨论的,是在Swift里,如何通过可选类型来保证强类型的安全性.作为例子,我们来创建一个Objective-C API的Swift版本,但实际上Swift本身并不需要这样的API. 为Dictionary增加objectsForKeys函数

Swift中使用可选类型完美解决占位问题_Swift

可选类型是Swift中新引入的,功能很强大.在这篇博文里讨论的,是在Swift里,如何通过可选类型来保证强类型的安全性.作为例子,我们来创建一个Objective-C API的Swift版本,但实际上Swift本身并不需要这样的API. 为Dictionary增加objectsForKeys函数 在Objective-C中,NSDictionary有一个方法-objectsForKeys:NoFoundMarker:, 这个方法需要一个NSArray数组作为键值参数,然后返回一个包含相关值的数组

《从零开始学Swift》学习笔记(Day 27)——可选类型

原创文章,欢迎转载.转载请注明:关东升的博客   可选类型: 我们先看看如下代码: var n1: Int = 10 n1 = nil //编译错误 let str: String = nil //编译错误 Int和String类型不能接受nil的,但程序运行过程中有时被复制给nil是在所难免的,Swift为每一种数据类型提供一种可选类型(optional),即在某个数据类型后面加上问号(?)或感叹号(!),修改前文示例代码: var n1: Int? = 10 n1 = nil let str

Swift入门篇-基本类型(3)

原文:Swift入门篇-基本类型(3)     一:元组 格式 变量或常量关键字 元组变量 = ( 变量,变量, -) 说明: 1: 元组变量还是一个变量,只不过表现方式和其他变量不一样2:()括号里面可以放入N个变量组成 例子: import Foundation /* A是元组变量,()里面放着 整形 和字符串 元组类型为 整形和字符串 组成 */ var A = (1,"swift")//元组变量A 由 整形和字符串 组成 println(A) 运行结果 (1, swift)  

Swift编程之枚举类型详解_Swift

想必写过程序的童鞋对枚举类型并不陌生吧,使用枚举类型的好处是多多的,在这儿就不做过多的赘述了.Fundation框架和UIKit中的枚举更是数不胜数,枚举可以使你的代码更易阅读并且可以提高可维护性.在Swift语言中的枚举可谓是让人眼前一亮.在Swift中的枚举不仅保留了大部分编程语言中枚举的特性,同时还添加了一些好用而且实用的新特性,在本篇文章中将领略一些Swift中枚举类型的魅力. 有小伙伴会问,不就是枚举么,有什么好说的.在Swift中的枚举怎不然,Swift中的枚举的功能要强大的多,不仅

Swift语言指南(六) Swift语言的可选值

在值可能不存在的情况下使用可选值(optional), 可选值是: · 存在一个值,这个值等于 x 或 · 不存在任何值 注: 在 C 和 Objective-C 中可选值的概念并不存在.Objective-C 中(与可选值)最相近的(概念)是,一个以对象为返回值的方法,也可以返回 nil,nil表示"不存在有效的对象".不过,这规则只对对象有效--对于结构.基本的 C 类型或枚举值无效.对于这些类型,Objective-C 语言的方法通常会返回一个特殊值(如 NSNotFound)来

Swift入门篇-基本类型(1)

原文:Swift入门篇-基本类型(1)        博主语文一直都不好(如有什么错别字,请您在下评论)望您谅解,没有上过什么学的          今天遇到了一个很烦的事情是,早上10点钟打开电脑,一直都进入系统(我的系统  mac OS X Yosemite 10.10 系统),一直卡在登陆界面上进不去,心里想苹果新系统这么脆弱,现在很多软件不兼容就算了,搞的我还进不了系统,真是郁闷.然后在google 上搜索,google也打不开(真是悲催, 据说"组织" 要开会,大家先不要用g

Swift入门篇-基本类型(2)

原文:Swift入门篇-基本类型(2)      现在我也在学习Swift语言,常常去逛很多苹果社区和论坛,看到了圈子很多奇怪的现象,发现很多人都赶忙去翻译 Swift书籍 和 发布Swift的视频 .他们这种对新知识的探索精神我本人是很佩服的.但是我也觉得语言都没有发布几天,就赶忙去翻译书籍和Swift视频,然后讲SWift语言多么优美和多么好.我个人觉得他们都没有静下心来,去敲代码和研究Swift语言到底好在那里,而急于去翻译 未免也太草率了.   今天主要分享的是 swift中基本类型的

Swift教程之集合类型详解_Swift

Swift 提供两种集合类型来存储集合,数组和字典.数组是一个同类型的序列化列表集合.字典是一个能够使用类似于键的唯一标识符来获取值的非序列化集合. 在Swift中,数组和字典的键和值都必须明确它的类型.这意味这数组和字典不会插入一个错误的类型的值,以致于出错.这也意味着当你在数组和字典中取回数值的时候能够确定它的类型. Swift 使用确定的集合类型可以保证代码工作是不会出错,和让你在开发阶段就能更早的捕获错误. note: Swift的数组 储存不同的类型会展示出不同的行为,例如变量,常量或