设为首页 加入收藏

TOP

Swift--面试题及答案(二)
2019-09-03 02:40:02 】 浏览:640
Tags:Swift-- 试题 答案
p;(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(<)

注意每一步的编译结果都相同,但是最后一步你的闭包里只有一个字符。

问题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)
var brian = Person(name: "Brian", address: headquarters)

假设Brain搬家到街对面的建筑物里,那么你会这样更新他的地址:

brian.address.fullAddress = "148 Tutorial Street"

这样做将会发生什么?错误出在什么地方呢?

blob.png

答案:Ray同样会搬家到新的建筑物里面。Address是一个引用类型类,所以无论你是通过ray或者brain访问headquarters,访问都是同一个实例化对象。headquarters对象的变化也会引起ray和brain的变化。你能想象如果Brain收到Ray的邮件或者相反Ray收到Brain的邮件,将会发生什么?解决方案是创建一个新的Address对象赋值给Brain或者把Address声明成为结构体而不是一个类。

中级

问题1– Swift 2.0 or later

思考下面的代码:

var optional1: String? = nil
var optional2: String? = .None

nil 和 .None有什么不同?optional1和optional2有什么不同?

答案:两者没有什么不同。Optional.None(简称.None)是optional变量值初始化的标准方法,而nil只是.None语法的一种修饰。事实上下面语句输出是正确的:

nil == .None // On Swift 1.x this doesn't compile. You need Optional
.None

记住枚举类型的Optional下的None:

enum Optional{
  case None
  case Some(T)
}

问题2-Swift 1.0 or later

下面是thermometer作为类和结构体的例子:

public class ThermometerClass {
  private(set) var temperature: Double&nb
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 2/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇iOS资源大全中文版 下一篇李洪强经典面试题53-Swift

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目