[关闭]
@Rookie 2017-08-01T22:35:25.000000Z 字数 3504 阅读 2392

swift 面试题

找工作


Swift和Objective-C的联系

我们编写程序,让程序运行起来,被机器执行的代码并非全部是由我们自己来编写的。需要同时运行很多预先写好的支持性的代码,才能让我们自己的代码运行起来。程序并非单独存在的,运行时处在一定的环境当中。我总联想到很多小蚂蚁在泥土上面爬,而我自己写的程序只是其中的一只。
Swift跟Objective-C编译出的程序代码运行在同一套运行环境上面。Swift的类型可以桥接到Objective-C的类型,反之亦然。Swift编写的代码可以调用Objective-C编写的代码,反之也一样。
Objective-C之前积累下来的大量类库,实现不用改写Swift就可以直接调用。

Swift比Objective-C有什么优势?

Swift的内存管理是怎样的?

Swift 使用自动引用计数(Automatic Reference Counting, ARC)来简化内存管理, 这种内存管理方式相比GC而言,对程序员的要求较高, 并且ARC比GC更容易引起编程错误,但却比GC快。尤其在性能很重要的场合。

Swift支持面向过程编程吗?

它采用了 Objective-C 的命名参数以及动态对象模型,可以无缝对接到现有的 Cocoa 框架,并且可以兼容 Objective-C 代码,支持面向过程编程和面向对象编程。

举例说明Swift里面有哪些是 Objective-C中没有的?

Swift引入了在Objective-C中没有的一些高级数据类型,例如tuples(元组),可以使你创建和传递一组数值。
Swift还引入了可选项类型(Optionals),用于处理变量值不存在的情况。可选项的意思有两种:一是变量是存在的,例如等于X,二是变量值根本不存在。Optionals类似于Objective-C中指向nil的指针,但是适用于所有的数据类型,而非仅仅局限于类,Optionals 相比于Objective-C中nil指针更加安全和简明,并且也是Swift诸多最强大功能的核心。

Swift 是一门安全语言吗?

Swift是一门类型安全的语言,Optionals就是代表。Swift能帮助你在类型安全的环境下工作,如果你的代码中需要使用String类型,Swift的安全机制能阻止你错误的将Int值传递过来,这使你在开发阶段就能及时发现并修正问题。

为什么要在变量类型后面加个问号?

用来标记这个变量的值是可选的,一般用“!”和“?”定义可选变量的区别:用“!”定的可选变量必须保证转换能够成功,否则报错,但定义的变量可以直接使用,不会封装在option里;而用“?”号定的可选变量即使转换不成功本身也不会出错,变量值为nil,如果转换成功,要使用该变量进行计算时变量名后需要加“!”

什么是泛型,它们又解决了什么问题?

泛型是用来使代码能安全工作。在Swift中,泛型可以在函数数据类型和普通数据类型中使用,例如类、结构体或枚举。
泛型解决了代码复用的问题。有一种常见的情况,你有一个方法,需要一个类型的参数,你为了适应另一种类型的参数还得重新再写一遍这个方法。
比如,在下面的代码中,第二个方法是第一个方法的“克隆体”:

  1. func areIntEqual(x: Int, _ y: Int) -> Bool {
  2. return x == y
  3. }
  4. func areStringsEqual(x: String, _ y: String) -> Bool {
  5. return x == y
  6. }
  7. areStringsEqual("ray", "ray") // true
  8. areIntEqual(1, 1) // true

一个Objective-C开发者可能会采用NSObject来解决问题:

  1. - import Foundation
  2. - func areTheyEqual(x: NSObject, _ y: NSObject) -> Bool {
  3. - return x == y
  4. - }
  5. - areTheyEqual("ray", "ray") // true
  6. - areTheyEqual(1, 1) // true

这段代码能达到了目的,但是编译的时候并不安全。它允许一个字符串和一个整型数据进行比较:

  1. - areTheyEqual(1, "ray")
  2. //程序可能不会崩溃,但是允许一个字符串和一个整型数据进行比较可能不会得到想要的结果。
  3. 采用泛型的话,你可以将上面两个方法合并为一个,并同时还保证了数据类型安全。这是实现代码:
  4. - func areTheyEqual<T: Equatable>(x: T, _ y: T) -> Bool {
  5. - return x == y
  6. - }
  7. - areTheyEqual("ray", "ray")
  8. - areTheyEqual(1, 1)

github面试题

《招聘一个靠谱的 iOS》—参考答案(上)

《招聘一个靠谱的 iOS》—参考答案(下)

iOS基础问答面试题连载-附答案

第一篇 : iOS基础问答面试题连载(一)-附答案

第二篇 : iOS基础问答面试题连载(二)-附答案

第三篇 : iOS基础问答面试题连载(三)-附答案

第四篇 :iOS基础问答面试题连载(四)-持续更新题目

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注