我有一个类,通过泛型T类型接受数字类型,我想将其转换为CGFloat,但会抛出以下错误:
“无法使用类型为'T'的参数列表调用类型为'CGFloat'的初始化程序”
为了能够成功转换,我该在我的类中做什么呢?
“CGFloat(self.top)” - 这就是它不喜欢的地方
'T'类型定义如下:
“无法使用类型为'T'的参数列表调用类型为'CGFloat'的初始化程序”
为了能够成功转换,我该在我的类中做什么呢?
“CGFloat(self.top)” - 这就是它不喜欢的地方
'T'类型定义如下:
protocol Numeric:Comparable, Equatable {
//
init(_ v:Float)
init(_ v:Double)
init(_ v:Int)
init(_ v:UInt)
init(_ v:Int8)
init(_ v:UInt8)
init(_ v:Int16)
init(_ v:UInt16)
init(_ v:Int32)
init(_ v:UInt32)
init(_ v:Int64)
init(_ v:UInt64)
}
extension Float: Numeric {}
extension Double: Numeric {}
extension Int: Numeric {}
extension Int8: Numeric {}
extension Int16: Numeric {}
extension Int32: Numeric {}
extension Int64: Numeric {}
extension UInt: Numeric {}
extension UInt8: Numeric {}
extension UInt16: Numeric {}
extension UInt32: Numeric {}
extension UInt64: Numeric {}
class MyClass<T: Numeric> {
//...
var top:T
}
当我使用as
时,就会出现这个运行时错误
无法将类型为 'Swift.Double' (0x1002b64f8) 的值转换为 'CoreGraphics.CGFloat' (0x1004e8740)。
_asOther() -> T
,允许符合协议的每种类型将自己转换为另一种类型。 - Hamish