设为首页 加入收藏

TOP

Swift 面试题(二)
2019-08-15 00:11:50 】 浏览:297
Tags:Swift 试题
ria
{ func makeMargherita() { return makePizza(["tomato", "mozzarella"]) } } struct Lombardis: Pizzeria { func makePizza(_ ingredients: [String]) { print(ingredients) } func makeMargherita() { return makePizza(["tomato", "basil", "mozzarella"]) } } let lombardis1: Pizzeria = Lombardis() let lombardis2: Lombardis = Lombardis() lombardis1.makeMargherita() lombardis2.makeMargherita()

这时候打印出如下结果:
["tomato", "mozzarella"]
["tomato", "basil", "mozzarella"]

因为lombardis1 是 Pizzeria,而 makeMargherita() 有默认实现,这时候我们调用默认实现。

7. Swift 中定义常量和 Objective-C 中定义常量有什么区别?

一般人会觉得没有差别,因为写出来好像也确实没差别。
OC是这样定义常量的:

const int number = 0;

Swift 是这样定义常量的:

let number = 0

首先第一个区别,OC中用 const 来表示常量,而 Swift 中用 let 来判断是不是常量。
上面的区别更进一步说,OC中 const 表明的常量类型和数值是在 compilation time 时确定的;而 Swift 中 let 只是表明常量(只能赋值一次),其类型和值既可以是静态的,也可以是一个动态的计算方法,它们在 runtime 时确定的。

8. Swift 中 struct 和 class 什么区别?举个应用中的实例

struct 是值类型,class 是引用类型。
看过WWDC的人都知道,struct 是苹果推荐的,原因在于它在小数据模型传递和拷贝时比 class 要更安全,在多线程和网络请求时尤其好用。我们来看一个简单的例子:

class A {
  var val = 1
}

var a = A()
var b = a
b.val = 2

此时 a 的 val 也被改成了 2,因为 a 和 b 都是引用类型,本质上它们指向同一内存。解决这个问题的方法就是使用 struct:

struct A {
  var val = 1
}

var a = A()
var b = a
b.val = 2

此时 A 是struct,值类型,b 和 a 是不同的东西,改变 b 对于 a 没有影响。

9. Swift 到底是面向对象还是函数式的编程语言?

Swift 既是面向对象的,又是函数式的编程语言。
说 Swift 是 Object-oriented,是因为 Swift 支持类的封装、继承、和多态,从这点上来看与 Java 这类纯面向对象的语言几乎毫无差别。
说 Swift 是函数式编程语言,是因为 Swift 支持 map, reduce, filter, flatmap 这类去除中间状态、数学函数式的方法,更加强调运算结果而不是中间过程。


文章转载自:http://www.pythonheidong.com/blog/article/2188/

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇ios 动画:底部标签栏的概念设计 下一篇OC方法交换swizzle详细介绍——不..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目