设为首页 加入收藏

TOP

Swift--面试题及答案(五)
2019-09-03 02:40:02 】 浏览:696
Tags:Swift-- 试题 答案
lConvertible BooleanLiteralConvertible IntegerLiteralConvertible FloatLiteralConvertible UnicodeScalarLiteralConvertible ExtendedGraphemeClusterLiteralConvertible StringLiteralConvertible ArrayLiteralConvertible DictionaryLiteralConvertible

采用相应的协议并且提供一个允许字面量初始化的公用方法。在Thermometer类型的例子下,我们需要实现FloatLiteralConvertible协议,代码如下:

extension Thermometer : FloatLiteralConvertible {
  public init(floatLiteral value: FloatLiteralType) {
    self.init(temperature: value)
  }
}

那么现在,你就可以通过一个简单的float数字创建一Thermometer对象,代码如下:

var thermometer: Thermometer = 56.8

问题2 - Swift 1.0 or later

Swift 拥有一系列预定义的运算符,这些运算符执行不同类型的操作,例如算术运算符和逻辑运算符。它甚至允许创建自定义的运算符,无论是一元运算符还是二元运算符。自定义一个满足一下规格的幂运算符:

以两个整数作为参数

返回第一个参数的第二个参数次方的值

忽略潜在溢出错误

答案:创建一个自定义的运算符需要两个步骤:声明它和实现它。

使用operator关键字来声明指定的类型(一元或者二元)、组成这个运算符字符的顺序已经它的优先级和关联性。

在这中情况下,运算符是^^,类型是infix(二进制),关联性是right,优先级设置成为155,原因是乘法和除法的优先级是150.下面就是具体的声明代码:

infix operator ^^ { associativity right precedence 155 }

代码实现如下:

func ^^(lhs: Int, rhs: Int) -> Int {
  let l = Double(lhs)
  let r = Double(rhs)
  let p = pow(l, r)
  return Int(p)
}

值得注意的是,它并不需要溢出考虑;如果操作产生的结果int不能代表,如大于int.max,就会发生运行时错误。

问题3 - Swift 1.0 or later

你能像下面的代码一样使用原始值定义一个枚举类型吗?如果不行,说明原因。

enum Edges : (Double, Double) {
  case TopLeft = (0.0, 0.0)
  case TopRight = (1.0, 0.0)
  case BottomLeft = (0.0, 1.0)
  case BottomRight = (1.0, 1.0)
}

答案:不行。原始值得类型必须满足一下条件

遵守Equatable协议

满足能转换成下列类型中的任何一个类型:    

    a.Int
    b.String
    c. Character

在上面的代码中,原始值即使是独立的个体值,但是它仍然是一个不兼容的元组。 

问题4- Swift 2.0 or later

下面的代码定义了一个结构体Pizza和一个协议Pizzeria,这个协议有一个包含makeMargherita()函数的扩展。

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

现在你将要定义一个如下的Lombardi的餐馆:

struct Lombardis: Pizzeria {
  func makePizza(ingredients: [String]) -> Pizza {
    return Pizza(ingredients: ingredients)
  }
  func makeMargherita() -> Pizza {
    return makePizza(["tomato", "basil", "mozzarella"])
 &
首页 上一页 2 3 4 5 6 7 8 下一页 尾页 5/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇iOS资源大全中文版 下一篇李洪强经典面试题53-Swift

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目