黑马程序员技术交流社区

标题: 【面试必备】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、泛型协议
答案:
问题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