设为首页 加入收藏

TOP

Swift--面试题及答案(三)
2019-09-03 02:40:02 】 浏览:625
Tags:Swift-- 试题 答案
sp;= 0.0   public func registerTemperature(temperature: Double) {     self.temperature = temperature   } }   let thermometerClass = ThermometerClass() thermometerClass.registerTemperature(56.0)   public struct ThermometerStruct {   private(set) var temperature: Double = 0.0   public mutating func registerTemperature(temperature: Double) {     self.temperature = temperature   } }   let thermometerStruct = ThermometerStruct() thermometerStruct.registerTemperature(56.0)

但是这段代码编译失败了,请问哪里报错,出错的原因是什么。

建议:在使用Playground之前,认真阅读代码并思考。

答案:代码的最后一行不会被编译通过。ThermometerStruct结构体中正确的声明了一个mutating属性函数,它是用来改变结构体内部temperature属性的值的,但是编译器不通过的原因是,通过let创建的不可变的registerTemperature结构体调用了registerTemperature函数。

问题3– Swift 1.0 or later

下面的代码输出是什么?并说明理由。

var thing = "cars"
 
let closure = { [thing] in
  print("I love \(thing)")
}
 
thing = "airplanes"
 
closure()

答案:输出的是:I love cars。当闭包被声明的时候,抓捕列表就复制一份thing变量,所以被捕捉的值并没有改变,即使你给thing赋了一个新值。

如果你要忽视闭包中捕捉列表的值,那么编译器引用那个值而不是复制。这种情况下,被引用变量的值的变化将会反映到闭包中,正如下面的代码所示:

var thing = "cars"
 
let closure = {   
  print("I love \(thing)")
}
 
thing = "airplanes"
 
closure() // Prints "I love airplanes"

问题4– Swift 2.0 or later

下面是一个全局函数,这个函数的功能是计算数组中特殊值得个数。(待校验)

func countUniques(array: Array) -> Int {
  let sorted = array.sort(<)
  let initial: (T?, Int) = (.None, 0)
  let reduced = sorted.reduce(initial) { ($1, $0.0 == $1 ? $0.1 : $0.1 + 1) }
  return reduced.1
}

它使用了< 和==运算符,他们限制着T(占位类型)的实际类型,也就是说T必须遵循Comparable协议。你可以这样使用它:

countUniques([1, 2, 3, 3]) // result is 3

现在要求你重写上面的方法作为Array的扩展方法,然后你就可以这样写代码:

[1, 2, 3, 3].countUniques() // should print 3

如何实现?

答案:在Swift 2.0 中,泛类型可以使用类型约束条件被强制扩展。但是假如这个泛类型不满足这个类型的约束条件,那么这个扩展方法既不可见也无法调用。

所以countUniques全局函数可以作为Array的扩展方法被重写如下:

extension Array where Element: Comparable {
  func countUniques() -> Int {
    let sorted = sort(<)
    let initial: (Element?, Int) = (.None, 0)
    let reduced = sorted.reduce(initial) { ($1, $0.0 == $1 ? $0.1 : $0.1 + 1) }
   &n
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 3/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇iOS资源大全中文版 下一篇李洪强经典面试题53-Swift

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目