• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

swift ~面试题(Optional)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 联系人:石虎 QQ:1224614774  昵称嗡嘛呢叭咪哄

                      QQ:807236138  群称iOS 技术交流学习群

一、面试题

class Person {
    var name: String
    var age: Int
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

let person1 = Person(name: "Shihu", age: 26)
var person2 = person1
person2.name = "Zhangying"

person1.name 和 person2.name 分别是什么

答案 
都是
Zhangying 
解析: 
在swift中,class是引用类型(reference type), 只是指针复制而不是值复制, var person2 = person1创建一个一个person1并复制给了person2, 从这一行开始,任何person1的改变都会在person2中变化

 

二、Optional(可选型)是怎么实现的:

Optional类型表示: 有值 / 没有值

Objective-C中并没有Optional类型, 只有nil,并且nil只能用于表示对象类型无值,

并不能用于基础类型(int, float),枚举和结构体,基础类型需要返回类似NSNotFound的特殊值来表示无值,

所以在Swift中定义了Optinal类型来表示各种类型的无值状态,并规定了nil不能用于非可选的常量和变量,只能用于Optinal类型.

//基本用法:

var serverResponseCode: Int? = nil
// serverResponseCode 现在不包含值

serverResponseCode = 404
// serverResponseCode 包含一个可选的 Int 值 404
Int? 表示serverResponseCode可以是有值的也可以是无值的

var surveyAnswer: String?
//surveyAnswer 被自动设置为 nil

可选绑定:

if let constantName = someOptional {

     print("get the value: \(constantName)")

}

//如果someOptional这个optional类型有值,创建一个叫做constantName的常量并将someOptional包含的值赋给它。

//并且因为constantName已经被optional类型包含的值初始化过,所以不需要再使用 ! 后缀来获取它的值。

强制解析/解包 ( forced unwrapping )

当确定可选类型确实包含值之后,可以在可选的名字后面加一个感叹号( ! )来获取值;

Option == nil时,使用 ! 来获取会导致运行时错误。所以使用 ! 来强制解析值之前,一定要确定Option类型不是nil

隐式解析可选类型 ( implicitly unwrapped optionals )

有时候在编写程序中,一个optional类型第一次被赋值后,可以确定它以后总会有值,

在这种情况下,使用它时每次都还需要判断和解包optional类型是非常低效的,因为可以确定它总会有值,

所以Swift中定义了一个隐式解析可选类型,它在使用时可以自动解析;

把( String? )改成感叹号( String! )就可以声明一个隐式解析可选类型。

let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // 需要惊叹号来获取值


let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString // 不需要感叹号

但是需要注意:

  • 如果你在隐式解析可选类型没有值的时候取值,会触发运行时错误,

这和你在无值的普通Optional类型后面加一个惊叹号的情景一样;

  • 如果一个变量以后还可能变成 nil 的话,不要使用隐式解析可选类型;
  • 并且如果需要在变量的生命周期中判断是否 是 nil 的话,请使用普通可选类型;

可以理解为隐式解析可选类型用于声明初始化时可能为nil,但之后会立刻被赋值,并且不会再变成nilOptional类型对象

 

谢谢!!!

本账号主要分享我成长过程中的各种心得感悟,包括技术总结, iOS、Swift 和 Mac 相关技术文章、工具资源、参与技术讨论,整理开发技巧、让学习成为一种享受!

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift经典算法-希尔排序法发布时间:2022-07-14
下一篇:
swift教程[入门] 使用xcode playground编写第一个swift程序发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap