答 《卓同学的 Swift 面试题》

原题的链接:http://www.jianshu.com/p/7c7f4b4e4efe

1. class 和 struct 的区别

一个引用类型,一个值类型

2. 不通过继承,代码复用(共享)的方式有哪些

在swift 文件里直接写方法,相当于一个全局函数。
extension 给类直接扩展方法。

3. Set 独有的方法有哪些?

不会出现重复的值。
里面的元素必须时相同的类型。

4. 实现一个 min 函数,返回两个元素较小的元素
func min<T : Comparable>(_ a : T , b : T) -> T {
    return a < b ? a : b
}
5. map、filter、reduce 的作用

map : 映射 , 将一个元素根据某个函数 映射 成另一个元素(可以是同类型,也可以是不同类型)
filter : 过滤 , 将一个元素传入闭包中,如果返回的是false , 就过滤掉
reduce :先映射后融合(这样说容易理解) , 将数组中的所有元素映射融合在一起。举个例子:
求所有人的钱的总和,这里钱是字符串表示的

struct Person {
    let name : String
    let money : String
}
let a = Person(name: "小王", money: "5.0")
let b = Person(name: "小李", money: "7.1")
let c = Person(name: "小张", money: "3.22")

let sumMoney = [a , b , c].reduce(0) {
    return $0 + ($1.money as NSString).doubleValue
}
print(sumMoney)
//15.32
6. map 与 flatmap 的区别

map不能将元素映射成可选类型,flatmap可以

7. 什么是 copy on write

百度

8. 如何获取当前代码的函数名和行号

函数名#functio 行号#line 文件名#file

9. 如何声明一个只能被类 conform 的 protocol
protocol OnlyClassProtocol : class {

}
10. guard 使用场景

相当于

if !(...) {
  return
}

可以理解为拦截,凡是不满足 guard 后面条件的,都不会再执行下面的代码。
我一般用来解包 。 不能解包的, 就不能执行下面的代码

11. defer 使用场景

在一对花括号 : { } 里 使用defer ,这个defer 里面的内容将会在结束 {} 前(or 后?) 被执行

defer
11. String 与 NSString 的关系与区别

能够互相转换,一个值类型,一个引用类型

12. 怎么获取一个 String 的长度
print( "abcdefg".characters.count ) 
//7

("abcdefg" as NSString).length //这个要算作NSString的获取长度的方法
13. throws 和 rethrows 的用法与作用

throws 声明在函数的末尾,表示这个函数会抛出 Error的子类.
rethrows 再传入throws的闭包时,这个函数返回用rethrows

14. try? 和 try!是什么意思

try! 强制抛出错误,有错误就会崩溃
try? 抛出错误,没错误不会崩溃直接返回
try :

WX20170315-175706.png

如果不用do catch , 就会编译报错

WX20170315-175838.png

如果函数后面加上 throws , 将错误传递下去. 即使不用都do catch 编译也不会报错。 但是调用throwfun2()还是要使用do catch

14. associatedtype 的作用

相当于protocol的范型

protocol Animal {
    associatedtype AnimalType : Comparable
}

extension Animal {
    typealias AnimalType = Self
}
13. 什么时候使用 final

不允许class 被继承
不允许函数被重写

14. public 和 open 的区别

没用过 百度吧

15. 声明一个只有一个参数没有返回值闭包的别名
typealias NoReturn = (String) -> Void
16. Self 的使用场景

表示自己本身的类型,见14的例子

17. dynamic 的作用

动态化。用的少

18. 什么时候使用 @objc

与oc交互。

19. Optional(可选型) 是用什么实现的

enum 和 重载符号 ?

20. 如何自定义下标获取
WX20170315-182238.png

Array的文档

21. ?? 的作用

当 ?? 前面的值为nil 的时候就取 ??后面的值

22. lazy 的作用

只有属性被调用的时候才会执行lazy

WX20170315-183000.png

如果直接给属性赋值

WX20170315-183118.png
22. 一个类型表示选项,可以同时表示有几个选项选中(类似 UIViewAnimationOptions ),用什么类型表示

继承了OptionSet的struct , enum 。 class 没有试过,应该也可以

23. inout 的作用

改变函数外的值

24. Error 如果要兼容 NSError 需要做什么操作

不明白

25. 下面的代码都用了哪些语法糖 [1, 2, 3].map{ $0 * 2 }

用$0 捕获第一个参数。
只有一行代码的时候, 隐藏掉了 return 。

26. 什么是高阶函数

Curry化? 百度

27. 如何解决引用循环

weak unowned 关键字

28. 下面的代码会不会崩溃,说出原因
var mutableArray = [1,2,3]
for _ in mutableArray {
  mutableArray.removeLast()
}

在原题主的评论里有了

29. 给集合中元素是字符串的类型增加一个扩展方法,应该怎么声明
WX20170315-184548.png

参考文档的写法

WX20170315-184721.png

报错了。


WX20170315-185021.png

所以用了一个投机取巧的办法

30. 定义静态方法时关键字 static 和 class 有什么区别

struct 只能用static
class 的属性只能用 static , 其他地方都能随便用。
反正编译器会告诉你的

31. 一个 Sequence 的索引是不是一定从 0 开始?

不是。
ArraySlice是Sequence的子类,ArraySlice就不是

32. 数组都实现了哪些协议

翻文档?😎

33. 如何自定义模式匹配

不明白

34. autoclosure 的作用

可以传值或者有返回值的闭包。

35. 编译选项 whole module optmization 优化了什么

不知道

36. 下面代码中 mutating 的作用是什么
struct Person {

  var name: String {
      mutating get {
          return store
      }
  }
}

mutating 表示这个方法会(有可能)修改这个结构体, 只有var 的结构体才能调用mutation的方法

37. 如何让自定义对象支持字面量初始化

翻文档


WX20170315-192132.png
WX20170315-192404.png
38. dynamic framework 和 static framework 的区别是什么

动态库和静态库。不知道

39. 为什么数组索引越界会崩溃,而字典用下标取值时 key 没有对应值的话返回的是 nil 不会崩溃。

不知道。
但是原题主的评论已有答案。

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

推荐阅读更多精彩内容