2016-05-16 4 views
0

Swiftで列挙型を返す拡張を構築しようとしています(大文字、小文字の肯定、否定の否定)。私は最初にenumを構築しました。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

最初に静的に使用されているものは、既に説明されていますが、もう1つは既にプロパティがある場合です。isMinusなぜ自分のロジックを使用していますか?

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

} 
} 
+1

なぜ 'static'を使ってそれを壊すのかについての記述を含んでいるでしょうか?しかし、素晴らしい答えですが、私はあなたが 'isSignMinus'を指摘したのが好きです。 – Jase

+0

違うコードはすでに説明されているので、私は感謝しません:) – Sahil

+0

それは超簡単な解決策です。ありがとう! –

関連する問題