设为首页 加入收藏

TOP

Swift--面试题及答案(一)
2019-09-03 02:40:02 】 浏览:639
Tags:Swift-- 试题 答案

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

  • 原文:Swift Interview Questions and Answers

  • 原作者:Antonio Bello

  • 原作者介绍: Antonio 拥有丰富的编程经验。他开始编程的时候,内存单位还是 byte 而不是 gigabyte,存储空间还是可选的附加物,最常用的语言还是BASIC。现在,Antonio 的兴趣在于 iOS 应用开发、node.js 后端开发,而且他从来不会放过学习新东西的机会。他认为 Swift 是一门很有表现力的语言,不过 Objective-C 仍然是伟大而不同寻常的。

  • 译者:本文由CocoaChina译者 浅夏@旧时光 翻译


虽然Swift出生才一年,但是它已经成为最流行的编程语言之一了。它的语法很简单,以至于当它发布的时候,java script开发者感觉就像下图一样

blob.png

事实上,Swift是一种复杂的语言。它包含面向对象和函数方法这两个方面,并且随着新版本的发布在一直进化。

Swift的知识浩如烟海——但是怎么测试你掌握了多少?在这篇文章中,我和这个raywenderlich.com网站的教学团队共同写了一个Swift面试问题列表。

你可以用这些问题来测试应聘者关于Swift方面的知识水平,或者测试一下你自己。如果你不知道答案,没关系,没一个问题下面都有答案供你学习。

这些问题包含两个方面:

  • 笔试问题:通过电子邮件做一个编程测试是极好的,因为这涉及到写大量的代码,从代码质量上可以看出一个人的水平。

  • 面试问题:电话面试或者面对面面试也是很好的,因为对面试者来说口头交流会更方面。

每个方面有分成三个等级:

  • 初级:适合读了一到两本有关Swift的书,并且已经开始用Swift开发应用程序的初学者。

  • 中级:适合那些对Swift语言的概念有深刻理解和强烈兴趣的,并且一直在阅读大量有关Swift的博客文章并进行实践的中级工程师。

  • 高级:适合那些以探索Swift语言知识为乐趣,挑战自己,使用前言技术的人们。

假如你想回答这些问题,我建议你在回答这些问题之前,打开Playground运行一下这些问题的代码。这些问题的答案都在Xcode 7.0 Beta 6 版本中测试过。

准备好了吗?系好安全带,现在就开始!

编者注:特别感谢raywenderlich.com教学团队成员Warren BurtonGreg HeoMikael KonutganTim MitraLuke ParhamRui Peres, 和 Ray Wenderlich ,他们帮我相处了下面问题中得一些,并且测试区分难度级别。

笔试问题

初学者

问题1、(Swift 1.0及其之后的版本的问题)有什么更好的方法来写下面的for循环?

for var i = 0; i < 5; i++ {
  print("Hello!")
}

答案:

for _ in 0...4 {
  print("Hello!")
}

Swift 实现了两个数组运算符closed operator 和 half-operator.前者包含数组中得所有值。例如:下面的例子包含从0到4得所有整数:

0...4

half-operator不包含数组中的最后一个元素,下面的例子会得到的结果和上面的一样:

0..<5

问题2– Swift 1.0 or later

思考下面的问题:

struct Tutorial {
  var difficulty: Int = 1
}
 
var tutorial1 = Tutorial()
var tutorial2 = tutorial1
tutorial2.difficulty = 2

tutorial1.difficulty 和 tutorial2.difficulty的值分别是多少?假如Tutorial是一个类,会有什么不同?并说明原因。

答案:tutorial1.difficulty  的值是1,然而tutorial2.difficulty的值是2.

在Swift中结构体是值类型,他们的值是复制的而不是引用的。下面的一行代码意思是复制了tutorial1的值并把它赋值给tutorial2:

var tutorial2 = tutorial1

从这一行开始,tutorial2值得改变并不影响tutorial1的值。

假如Tutorial是一个类,tutorial1.difficulty和tutorial2.difficulty的值将都会是2.在Swift中类对象都是引用类型。tutorial1属性的任何改变将会反应到tutorial2上,反之亦然。

问题3 – Swift 1.0 or later

view1声明成var类型,view2声明let类型。这里有什么区别吗?下面的最后一行代码能编译吗?

import UIKit
 
var view1 = UIView()
view1.alpha = 0.5
 
let view2 = UIView()
view2.alpha = 0.5 // Will this line compile?

答案:view1是个变量可以重新赋值给一个新的实例化的UIView对象。使用let你只赋值一次,所以下面的代码是不能编译的:

view2 = view1 // Error: view2 is immutable

但是UIView是一个引用类型的类,所以你可以改变view2的属性,也就是说最后一行代码是可以编译的:

let view2 = UIView()
view2.alpha = 0.5 // Yes!

问题4 – Swift 1.0 or later

下面的代码是把数组里面的名字按字母的顺序排序,看上去比较复杂。尽最大的可能简化闭包里的代码。

let animals = ["fish", "cat", "chicken", "dog"]
let sortedAnimals = animals.sort {&nbs
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇iOS资源大全中文版 下一篇李洪强经典面试题53-Swift

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目