本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!
== 本文为word格式,下载后可方便编辑和修改! ==
Swift笔试试题及其答案
  导读:虽然Swift出生才一年,但是它已经成为最流行的编程语言之一了。它的语法很简单,以至于当它发布的时候,java script开发者感觉就像下图一样。以下是由小编J.L为您整理推荐的Swift 笔试 试题及其答案,欢迎参考阅读。
  事实上,Swift是一种复杂的语言。它包含面向对象和函数方法这两个方面,并且随着新版本的发布在一直进化。
  你可以用这些问题来测试应聘者关于Swift方面的知识水平,或者测试一下你自己。如果你不知道答案,没关系,没一个问题下面都有答案供你 学习 。
  这些问题包含两个方面:
 
  笔试问题:通过做一个编程测试是极好的,因为这涉及到写大量的代码,从代码质量上可以看出一个人的水平。
  面试 问题:电话面试或者面对面面试也是很好的,因为对面试者来说口头交流会更方面。
  每个方面有分成三个等级:
  初级:适合读了一到两本有关Swift的书,并且已经开始用Swift开发应用程序的初学者。
  中级:适合那些对Swift语言的概念有深刻理解和强烈兴趣的,并且一直在阅读大量有关Swift的博客文章并进行实践的中级工程师。
  高级:适合那些以探索Swift语言知识为乐趣,挑战自己,使用前言技术的人们。
  假如你想回答这些问题,我建议你在回答这些问题之前,打开Playground运行一下这些问题的代码。这些问题的答案都在Xcode 7.0 Beta 6 版本中测试过。
  准备好了吗?系好安全带,现在就开始!
  笔试问题
  初学者
  问题1、(Swift 1.0及其之后的版本的问题)有什么更好的方法来写下面的for循环?
  for var i = 0; i < 5; i++ {
  print("Hello!")
  }
  答案:
  for _ 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 { (one: String, two: String) -> Bool in
  return one < two
  }
  答案:
  第一个简化的是参数。系统的参数类型推断功能,可以计算出闭包里面参数的类型,所以你不必定义参数的类型:
  let sortedAnimals = animals.sort { (one, two) -> Bool in return one < two }
  函数返回值也可以被推断出来,所以简化掉,代码变为:
  let sortedAnimals = animals.sort { (one, two) in return one < two }
  这个$i 符号可以代替参数名字,代码进一步简化为:
  let sortedAnimals = animals.sort { return $0 < $1 }
  在一个独立的闭包内,return这个关键字是可以省略的。最后声明的返回值就是闭包的返回值:
  let sortedAnimals = animals.sort { $0 < $1 }
  这简化很多了,但是我们不能止步于此!
  对于字符串,有一个定义如下的比较函数:
  func Bool
  这个简单的小函数可以使你的代码简洁如下:
  let sortedAnimals = animals.sort(<)
swift 字符串转数组  注意每一步的编译结果都相同,但是最后一步你的闭包里只有一个字符。
  问题5 – Swift 1.0 or later
  下面的代码创建了两个类Address和Person,并且创建了两个实例对象分别代表Ray和Brain.
  class Address {
  var fullAddress: String
  var city: String
  init(fullAddress: String, city: String) {
  self.fullAddress = fullAddress
  self.city = city
  }
  }
  class Person {
  var name: String
  var address: Address
  init(name: String, address: Address) {
  self.name = name
  self.address = address
  }
  }
  var headquarters = Address(fullAddress: "123 Tutorial Street", city: "Appletown")
  var ray = Person(name: "Ray", address: headquarters)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。