当前位置: 首页 > 面试题库 >

通用类型约束仅适用于数字类型

施锋
2023-03-14
问题内容

我试图弄清楚如何为通用类(在Swift中)实现类型约束,它将通用类型限制为仅数字类型。例如Double,Int等,但不是字符串。谢谢你的帮助。


问题答案:

您可以使用尖括号为通用类(对函数使用相同的语法)指定类型约束(使用类和协议):

class Foo<T: Equatable, U: Comparable> { }

要在单个类型上指定多个需求,请使用where子句:

class Foo<T: UIViewController where T: UITableViewDataSource, T: UITextFieldDelegate> { }

但是,您似乎无法在泛型参数子句中指定可选要求,因此一种可行的解决方案是创建一个协议,使所有数字类型都通过扩展来实现,然后将类限制为该要求:

protocol Numeric { }

extension Float: Numeric {}
extension Double: Numeric {}
extension Int: Numeric {}


class NumberCruncher<C1: Numeric> {
    func echo(num: C1)-> C1 {
        return num
    }
}

NumberCruncher<Int>().echo(42)
NumberCruncher<Float>().echo(3.14)


 类似资料:
  • 我试图编写一个通用的getter函数,给定一个键,该键应该只返回类型字符串| boolean | number。因此,默认值应与返回值的类型相同 这是我尝试过的。 我得到这个错误,不确定是什么错误。 什么可能是“字符串|数字|布尔”的子类型让我感到困惑。它们不是已经是基本类型了吗?

  • 问题内容: (我很惊讶无法在stackoverflow上找到这个问题,我只能归咎于糟糕的谷歌搜索,必须指出所有重复的问题…) 这是一个玩具类,它返回与您放入的玩具相反的东西。目前,它适用于整数,但只需要很小的改动就可以适用于String。 我想做的是使类通用,但仅适用于两个或三个可能的类型。所以我想写的是: 正确的语法是什么?我的Google-fu让我失败了… :( 编辑:似乎 没有 正确的语法,

  • 销关节 cpPinJoint *cpPinJointAlloc(void) cpPinJoint *cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2) cpConstraint *cpPinJointNew(cpBody *a, cpBody *b, cpVect anchr1,

  • 问题内容: 根据这个答案 我试图在我的桌子上创建一个Select for 但是我对位类型示例sqlfiddle遇到了问题,如您所见,它应该返回4行,但它仅返回3行,所以我想念什么? 问题答案: 这是因为您可以将as作为列的值。而且SQL具有三值逻辑,因此检查将返回,而不是(如您期望的那样)。我认为此查询将为您提供帮助:

  • 本文向大家介绍PHP类型约束用法示例,包括了PHP类型约束用法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP类型约束用法。分享给大家供大家参考,具体如下: 在强类型语言中,类型约束是语法上的要求,即定义一个变量的时候,必须指定类型,并以后也只能存储该类型数据; php是弱类型,其特点是无需为变量指定类型,而且在其后也可以存储任何类型,不过在php的新语法中,在某些特定场合,针对

  • 泛型的类型约束 swapTwoValues(_:_:)函数和Stack类型可以用于任意类型. 但是, 有时在用于泛型函数的类型和泛型类型上, 强制其遵循特定的类型约束很有用. 类型约束指出一个类型形式参数必须继承自特定类, 或者遵循一个特定的协议、组合协议. 例如, Swift的Dictionary类型在可以用于字典中键的类型上设置了一个限制. 如字典中描述的一样,字典键的类型必须是可哈希的. 也