答“卓同学的 Swift 面试题”--中篇

接上篇,答“卓同学的 Swift 面试题”--上篇
面试题链接:卓同学的 Swift 面试题

在上篇中,回答了基础篇前11题,接着回答中间12题:

12. String 与 NSString 的关系与区别
13. 怎么获取一个 String 的长度
14. 如何截取 String 的某段字符串
15. throws 和 rethrows 的用法与作用
16. try? 和 try!是什么意思
17. associatedtype 的作用
18. 什么时候使用 final
19. public 和 open 的区别
20. 声明一个只有一个参数没有返回值闭包的别名
21. Self 的使用场景
22. dynamic 的作用
23. 什么时候使用 @objc
12. String 与 NSString 的关系与区别

Swift 的String类型与 Foundation NSString类进行了无缝桥接。他们最大的区别就是:String是值类型,而NSString是引用类型。
其他方面的差异就体现在各自api 上的差异。

13.怎么获取一个 String 的长度
let length1 = "string".characters.count
let length2 = "string".data(using: .utf8).count
let length3 = ("string" as NSString).length
14. 如何截取 String 的某段字符串

每一个String值都有一个关联的索引(index)类型,String.Index,它对应着字符串中的每一个Character的位置
具体参见:Accessing and Modifying a String

15.throws 和 rethrows 的用法与作用
  • throw异常,这表示这个函数可能会抛出异常,无论作为参数的闭包是否抛出异常
  • rethrow异常,这表示这个函数本身不会抛出异常,但如果作为参数的闭包抛出了异常,那么它会把异常继续抛上去
public func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]
16. try? 和 try!是什么意思

** try? ** 是用来修饰一个可能会抛出错误的函数。会将错误转换为可选值,当调用try?+函数或方法语句时候,如果函数或方法抛出错误,程序不会发崩溃,而返回一个nil,如果没有抛出错误则返回可选值
** try! ** 会忽略错误传递链,并声明“do or die”。如果被调用函数或方法没有抛出异常,那么一切安好;但是如果抛出异常,二话不说,给你崩
参考:what's difference in try! and try?

17. associatedtype 的作用

Swift中的协议(protocol)采用的是“Associated Types”的方式来实现泛型功能的

18. 什么时候使用 final
  • 通过使用final提升程序性能,其实就算把所有不需要继承的方法、类都加上final关键字,效果也是微乎其微。
  • final 的正确使用场景-----权限控制, 具体情况如下:
    1. 类或者方法的功能确实已经完备了
    通常是一些辅助性质的工具类或者方法,比如MD5加密类这种,算法都十分固定,我们基本不会再继承和重写
    2. 避免子类继承和修改造成危险
    3. 为了让父类中某些代码一定会执行
19. public 和 open 的区别

** open **

  • open 修饰的 class 在 Module 内部和外部都可以被访问和继承
  • open 修饰的 func 在 Module 内部和外部都可以被访问和重载(override)

** public **

  • public 修饰的 class 在 Module 内部可以访问和继承,在外部只能访问
  • public 修饰的 func 在 Module 内部可以被访问和重载(override),在外部只能访问
20. 声明一个只有一个参数没有返回值闭包的别名
typealias IntBlock = (Int) -> Void
21. Self 的使用场景
  • 协议中声明
protocol Hello {
    func hello() -> Self
}
  • 协议扩展
protocol MyProtocol { }
extension MyProtocol where Self: UIView { }
22. dynamic 的作用
  • dynamic 可以用来修饰变量或函数,告诉编译器使用动态分发而不是静态分发。
  • 使用动态分发,可以更好的与OC中runtime的一些特性(如CoreData,KVC/KVO)进行交互
  • 标记为dynamic的变量/函数会隐式的加上@objc关键字,它会使用OC的runtime机制
23. 什么时候使用 @objc

在协议中使用 optional 关键字作为前缀来定义可选要求。可选要求用在你需要和 Objective-C 打交道的代码中。协议和可选要求都必须带上@objc属性。标记 @objc 特性的协议只能被继承自 Objective-C 类的类或者 @objc 类遵循,其他类以及结构体和枚举均不能遵循这种协议

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,292评论 18 399
  • 1、范型范型所解决的问题 函数、方法、类型:类,结构体,枚举,元组类型,协议参数,返回值,成员函数参数,成员属性类...
    我是小胡胡分胡阅读 740评论 0 1
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 6,928评论 0 62
  • 题目: 卓同学的 Swift 面试题 翻了 喵神 和 SwiftGG 的资料, 借鉴了 Arco_vv 和 En...
    青木KON阅读 1,845评论 3 8
  • 很多东西,越是牢牢抓住越是不能得到。比如爱情。比如我想要的青春。 今年成功的升学做了学姐,比起以往的初中高中这个大...
    不只有爱情阅读 479评论 0 0