2016-05-16 60 views
0

我試圖在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'應該保持爲浮動狀態。

回答

3

由於您使用static

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

self這個功能是指類型(Float結構),而不是實例(浮點數)。刪除static,你會沒事的。

+0

哦。神。我有時候是個白癡。我完全錯過了。謝謝! –

+0

別擔心。每個人都有不自豪的時刻。 –

+0

@RobinThuranMalhotra如果這回答你的問題,請接受它 – Alexander

1

第一件事你使用靜態作爲@codedifferent已經解釋,第二如果已經有一個屬性isMinus那麼爲什麼要使用自己的邏輯?

只需使用這個方法可以減少代碼的行數:

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

} 
} 
+1

也許包括爲什麼使用'static'打破它的描述?很好的回答,但我喜歡你指出'isSignMinus'。 – Jase

+0

代碼不同已經解釋過,所以我沒有,謝謝:) – Sahil

+0

這是一個超級簡單的解決方案。謝謝! –