设为首页 加入收藏

TOP

Swift--面试题及答案(六)
2019-09-03 02:40:02 】 浏览:641
Tags:Swift-- 试题 答案
nbsp;} }

下面的代码创建了Lombardis类型的两个实例对象,哪一个对象会产生一个带有basil的margherita披萨?

let lombardis1: Pizzeria = Lombardis()
let lombardis2: Lombardis = Lombardis()
 
lombardis1.makeMargherita()
lombardis2.makeMargherita()

答案:两个都可以。Pizzeria协议声明了makeMargherita()方法并且提供了一个默认的实现,而且它又在Lombardis的实现中被重写。在这两种情况下,由于这个方法在协议中被声明,那么在运行时相应的实现就会被调用。

假如Pizzeria协议没有声明makeMargherita()方法,但是扩展中仍然提供了如下的代码的这个方法默认的实现,会发生什么?

protocol Pizzeria {
  func makePizza(ingredients: [String]) -> Pizza
}
 
extension Pizzeria {
  func makeMargherita() -> Pizza {
    return makePizza(["tomato", "mozzarella"])
  }
}

这种情况下,只有lombardis2会产生一个带有basil的pizza,而lombardis1将会产生一个不带basil的pizza,原因是它会调用扩展中定义的那个方法。

问题5- Swift 2.0 or later

下面的代码有一个编译错误,请指出来并说明原因。

struct Kitten {
}
 
func showKitten(kitten: Kitten?) {
  guard let k = kitten else {
    print("There is no kitten")
  }
 
  print(k)
}

提示:有三种方法修复它。

答案:guard语句中得else语句必须需要一个返回路径,你可以使用return ,抛出异常或者调用@noreturn.最简单的解决方法是添加一个return语句,代码如下:

func showKitten(kitten: Kitten?) {
  guard let k = kitten else {
    print("There is no kitten")
    return
  }
  print(k)
}

下面是抛出异常的版本:

enum KittenError: ErrorType {
  case NoKitten
}
 
struct Kitten {
}
 
func showKitten(kitten: Kitten?) throws {
  guard let k = kitten else {
    print("There is no kitten")
    throw KittenError.NoKitten
  }
  print(k)
}
 
try showKitten(nil)

最后,调用一个@noreturn功能函数 fatalError( ) 解决方案:

struct Kitten {
}
 
func showKitten(kitten: Kitten?) {
  guard let k = kitten else {
    print("There is no kitten")
    fatalError()
  }
  print(k)
}

面试试题

blob.png

你很棒,但是你还没达到绝地武士的要求。任何人都可以写出代码,但是你如何处理理论和实践相结合的开放式问题?

为了解决这些问题,你仍然需要使用Playgroud写代码来验证一些问题。

初级

问题1- Swift 1.0 or later

什么是optional类型,它是用来解决什么问题的?

答案:optional类型被用来表示任何类型的变量都可以表示缺少值。在Objective-C中,引用类型的变量是可以缺少值得,并且使用nil作为缺少值。基本的数据类型如int 或者float没有这种功能。

Swift用optional扩展了在基本数据类型和引用类型中缺少值的概念。一个optional类型的变量,在任何时候都可以保存一个值或者为nil。

问题2- Swift 1.0 or later

在Swfit中,什么时候用结构体,什么时候用类?

答案:一直都有这样的争论:到底是用类的做法优于用结构体,还是用结构体的做法优于类。函数式编程倾向于值类型,面向对象编程更喜欢类。

在Swift 中,类和结构体有许多不同的特性。下面是两者不同的总结:

类支持继承,结构体不支持。

类是引用类型,结构体是值类型

并没有通用的规则决定结构体和类哪一个更好用。一般的建议是使用最小的工具来完成你的目标,但是有一个好的经验是多使用结构体,除非你用了继承和引用语义。

想要了解更多,点击这里

注意:在运行时,结构体的在性能方面更

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

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目