Swift中的公共扩展:Float vs Float.type

问题描述:

我试图在Swift中为Swift构建一个扩展,它返回一个枚举(case .Positive为正数,负数为.Negative)。我首先建立了一个枚举。现在Swift中的公共扩展:Float vs Float.type

public enum Sign 
{ 
    case Positive,Negative 
} 

,为扩展名,

public extension Float 
{ 
    public static func sign()-> Sign 
    { 
     if self < Float(0) 
     { 
      return Sign.Negative 
     } 
     else 
     { 
      return Sign.Positive 
     } 
    } 
} 

我越来越

不能类型的值 'Float.Type' 转换为预期的参数类型

对于该行

if self < Float(0) 

但是这不应该发生,考虑到Float扩展中的'self'应该保持为浮动状态。

由于您使用static

public static func sign()-> Sign { ... } 

self这个功能是指类型(Float结构),而不是实例(浮点数)。删除static,你会没事的。

+0

哦。神。我有时候是个白痴。我完全错过了。谢谢! –

+0

别担心。每个人都有不自豪的时刻。 –

+0

@RobinThuranMalhotra如果这回答你的问题,请接受它 – Alexander

第一件事你使用静态作为@codedifferent已经解释,第二如果已经有一个属性isMinus那么为什么要使用自己的逻辑?

只需使用这个方法可以减少代码的行数:

public extension Float { 
public func sign()-> Sign { 
    return self.isSignMinus ? Sign.Negative : Sign.Positive 

} 
} 
+1

也许包括为什么使用'static'打破它的描述?很好的回答,但我喜欢你指出'isSignMinus'。 – Jase

+0

代码不同已经解释过,所以我没有,谢谢:) – Sahil

+0

这是一个超级简单的解决方案。谢谢! –