设为首页 加入收藏

TOP

Swift--面试题及答案(四)
2019-09-03 02:40:02 】 浏览:549
Tags:Swift-- 试题 答案
bsp;return reduced.1   } }

注意:只有元类型实现了Comparable协议新的方法才可以被使用。例如,如果你在全部是UIView对象的数组中调用countUniques,编译器将会报错。

import UIKit
let a = [UIView(), UIView()]
a.countUniques() // compiler error here because UIView doesn't implement Comparable

问题5- Swift 2.0 or later

下面一个函数的功能是计算两个double(optional)类型的数的相除的结果。在执行除法之前,必须提前满足三个条件:

被除数必须包含nil值

除数必须为包含nil值

除数不能为零

func divide(dividend: Double?, by divisor: Double?) -> Double? {
  if dividend == .None {
    return .None
  }
 
  if divisor == .None {
    return .None
  }
 
  if divisor == 0 {
    return .None
  }
 
  return dividend! / divisor!
}

上面的函数可以正常使用,但是会存在两个问题:

那些前提条件可以利用guard语句。

使用了强制拆包。

请使用guard语句和避免使用强制拆包来优化这个函数。

答案:guard语句是在Swift 2.0中引进的,它是用途是在未满足某个条件时,提供一个退出的路径。对于检查是否满足先决条件来说,它是非常有用的。因为它可以使你更清晰的表达逻辑——而不是像i各种f语句嵌套实现那么复杂。下面就是一个例子:

guard dividend != .None else { return .None }

它也可以在optional binding(可选绑定)中使用。使用guard语句之后,使拆包后的变量可以被访问。

guard let dividend = dividend else { return .None }

所以divide函数被重写如下:

func divide(dividend: Double?, by divisor: Double?) -> Double? {
  guard let dividend = dividend else { return .None }
  guard let divisor = divisor else { return .None }
  guard divisor != 0 else { return .None }
  return dividend / divisor
}

我们发现隐身的可拆包的运算在代码的最后一行,因为dividend和divisor这两个参数已经被拆包并且以分别以一个常量来存储。

因此,你可以再次使用guard语句,使上面的函数更简洁:

func divide(dividend: Double?, by divisor: Double?) -> Double? {
  guard let dividend = dividend, divisor = divisor where divisor != 0 else { return .None }
  return dividend / divisor
}

上面的函数中使用了两个guard语句,因为使用了where语句指定了divisor不能为0的条件。

高级

问题1- Swift 1.0 or later

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

public struct Thermometer {
  public var temperature: Double
  public init(temperature: Double) {
    self.temperature = temperature
  }
}

创建一个thermometer实例对象,你可以使用下面的代码:

var t: Thermometer = Thermometer(temperature:56.8)

但是像下面的代码那样初始化对象是否会更好:

var thermometer: Thermometer = 56.8

能这样做吗?如果可以,怎么做?提示:it has to do with convertibles, but not convertibles like Camaros and Mustangs

答案:Swift 定义了下面的协议,这些协议可以使一种类型通过字面量的方式来初始化并赋值。

NilLitera
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 4/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇iOS资源大全中文版 下一篇李洪强经典面试题53-Swift

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目