黑马程序员技术交流社区
标题: 【面试必备】Swift 面试题及其答案 中级 [打印本页]
作者: 小李探花 时间: 2015-10-4 23:09
标题: 【面试必备】Swift 面试题及其答案 中级
中级
问题1- Swift 1.0 or later
Swift 是面向对象编程语言还是函数式编程语言?
答案:Swift是一种混合编程语言,它包含这两种编程模式。它实现了面向对象的三个基本原则:
说道Swift作为一种函数式编程语言,我们就不得不说一下什么是函数式编程。有很多不同的方法去定义函数式编程语言,但是他们表达的意义相同。
最常见的定义来自维基百科:...它是一种编程规范…它把电脑运算当做数学函数计算,避免状态改变和数据改变。
很难说Swift是一个成熟的函数式语言,但是它已经具备了函数式语言的基础。
问题2- Swift 1.0 or later
下面的功能特性都包含在Swift中吗?
1、泛型类
2、泛型结构体
3、泛型协议
答案:
- Swift 包含1和2特性。泛型可以在类、结构体、枚举、全局函数或者方法中使用。
- 3是通过typealias部分实现的。typealias不是一个泛型类型,它只是一个占位符的名字。它通常是作为关联类型被引用,只有协议被一个类型引用的时候它才被定义。
问题3- Swift 1.0 or later
在Objective-C中,一个常量可以这样定义:
const int number = 0;类似的Swift是这样定义的:
let number = 0两者之间有什么不同吗?如果有,请说明原因。
答案:const常量是一个在编译时或者编译解析时被初始化的变量。通过let创建的是一个运行时常量,是不可变得。它可以使用stattic 或者dynamic关键字来初始化。谨记它的的值只能被分配一次。
问题4- Swift 1.0 or later
声明一个静态属性或者函数,我们常常使用值类型的static修饰符。下面就是一个结构体的例子:
struct Sun { static func illuminate() {}}对类来说,使用static 或者class修饰符,都是可以的。它们使用后的效果是一样的,但是本质上是不同的。能解释一下为什么不同吗?
答案:
static修饰的属性或者修饰的函数都不可以重写。但是使用class修饰符,你可以重写属性或者函数。
当static在类中应用的时候,static就成为class final的一个别名。
例如,在下面的代码中,当你尝试重写illuminate()函数时,编译器就会报错:
class Star { class func spin() {} static func illuminate() {}} class Sun : Star { override class func spin() { super.spin() } override static func illuminate() { // error: class method overrides a 'final' class method super.illuminate() }}问题5- Swift 1.0 or later
你能通过extension(扩展)保存一个属性吗?请解释一下原因。
答案:不能。扩展可以给当前的类型添加新的行为,但是不能改变本身的类型或者本身的接口。如果你添加一个新的可存储的属性,你需要额外的内存来存储新的值。扩展并不能实现这样的任务。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |