A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

中级
问题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(扩展)保存一个属性吗?请解释一下原因。
答案:不能。扩展可以给当前的类型添加新的行为,但是不能改变本身的类型或者本身的接口。如果你添加一个新的可存储的属性,你需要额外的内存来存储新的值。扩展并不能实现这样的任务。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马