栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

类型应为通用函数采用什么协议,以在Swift中将任何数字类型作为参数?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

类型应为通用函数采用什么协议,以在Swift中将任何数字类型作为参数?

更新: 以下答案原则上仍然适用,但是Swift
4完成了数字协议的重新设计,因此通常不需要添加自己的数字协议。在构建自己的系统之前,请查看标准库的数字协议。


在Swift中,这实际上是不可能的。为此,您需要创建一个新协议,并使用您将在泛型函数中使用的任何方法和运算符进行声明。此过程将为您工作,但是确切的细节在一定程度上取决于您的通用函数的功能。这是获取数字

n
并返回的函数的处理方法
(n- 1)^2

首先,定义您的协议,使用运算符和一个接受一个的初始化程序

Int
(这样我们就可以减去一个)。

protocol NumericType {    func +(lhs: Self, rhs: Self) -> Self    func -(lhs: Self, rhs: Self) -> Self    func *(lhs: Self, rhs: Self) -> Self    func /(lhs: Self, rhs: Self) -> Self    func %(lhs: Self, rhs: Self) -> Self    init(_ v: Int)}

所有的数值类型都 已经实现了这些 ,但是此时编译器不知道它们符合新

NumericType
协议。您必须明确指出这一点-
Apple称其为“宣布扩展的协议采用”。我们将针对
Double
Float
和所有整数类型执行此操作:

extension Double : NumericType { }extension Float  : NumericType { }extension Int    : NumericType { }extension Int8   : NumericType { }extension Int16  : NumericType { }extension Int32  : NumericType { }extension Int64  : NumericType { }extension UInt   : NumericType { }extension UInt8  : NumericType { }extension UInt16 : NumericType { }extension UInt32 : NumericType { }extension UInt64 : NumericType { }

现在我们可以使用

NumericType
协议作为通用约束来编写实际功能。

func minusOneSquared<T : NumericType> (number : T) -> T {    let minusOne = number - T(1)    return minusOne * minusOne}minusoneSquared(5)   // 16minusoneSquared(2.3) // 1.69minusoneSquared(2 as UInt64)    // 1


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/392071.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号