2017-02-06 9 views
0

私のアプリケーション内で私のすべてのフォントファミリーの列挙を宣言します。今私はUIFFontの関数内で文字列として使用したいが、それはエラーを引き起こした!私が得た拡張子内で文字列として列挙型を使用する

enum Family: String { 
    case SansLight = "SansMobile-Light" 
    case SansReqular = "SansMobile" 
    case SansMedium = "SansMobile-Medium" 
} 

extension UIFont { 
    class func systemFontOfSize(size: CGFloat) -> UIFont { 
     return UIFont(name: Family.RawValue, size: size) 
    } 
} 

エラー:私は、単一の機能を上記のようにUIFont内の列挙型を使用するにはどうすればよい

Cannot convert value of type 'Family.RawValue.Type' (aka 'String.Type') to expected argument type 'String' 

答えて

1

enumFamilyで追加したcaseにアクセスできませんでした。

Family.SansLight.rawValue // OR Family.SansReqular.rawValue OR Family.SansMedium.rawValue 

//So it goes like 
return UIFont(name: Family.SansLight.rawValue, size: size) 

未直接

Family.RawValue 

注意する必要があります:あなたはそれをアンラップする必要があるので、あなたの関数では、指定したためinit(name:size:)はオプションUIFont?インスタンスを返します。返品タイプはUIFontではなくUIFont?

+0

おかげNiravを記述する必要があります。 1つの関数ですべてのループをどのようにループすることができますか?あなたの提案のために私は3 'func'を書くべきです。どのように私は1つの 'func'で扱うことができますか? – Sajad

+0

@Sajad上記のコメントは得られませんが、これらの3つのフォントを単一の 'UIFont'でインスタンス化できないようにするには、3つの別々のUIFontインスタンスを作成する必要があります。また、私の編集した解答をチェックしてください。 –

2

あなたは

enum Family: String { 
     case SansLight = "SansMobile-Light" 
     case SansReqular = "SansMobile" 
     case SansMedium = "SansMobile-Medium" 
    } 

    extension UIFont { 
     class func systemFontOfSize(size: CGFloat) -> UIFont { 
      return UIFont(name: Family.SansLight.rawValue, size: size) 
     } 
    } 
関連する問題