web-dev-qa-db-ja.com

SwiftでUIColorの拡張機能にアクセスする方法は?

私はSwiftに非常に慣れていないため、UIColorクラスの拡張を作成しようとしています。

extension UIColor{

    func getCustomBlueColor() -> UIColor {
        return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)   
    }

}

この後、私はメソッドにアクセスしました

btnShare.setTitleColor(UIColor.getCustomBlueColor(**UIColor**), forState: UIControlState.Normal)

このステートメントの引数として何を渡すべきかわかりません。

19
user4790024

インスタンスメソッドを定義しました。つまり、UIColorインスタンスでのみ呼び出すことができます。

let col = UIColor().getCustomBlueColor()
// or in your case:
btnShare.setTitleColor(UIColor().getCustomBlueColor(), forState: .Normal)

インスタンスメソッドはSwiftのカリー化された関数 であるため、コンパイラエラー「引数がありません」が発生するため、同等に次のように呼び出すことができます。

let col = UIColor.getCustomBlueColor(UIColor())()

(しかし、それは奇妙なことです。エラーメッセージの出所を説明するためだけに追加しました。)


しかし、本当に欲しいのはtypeメソッドclass func

extension UIColor{
    class func getCustomBlueColor() -> UIColor{
        return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)
    }
}

と呼ばれる

let col = UIColor.getCustomBlueColor()
// or in your case:
btnShare.setTitleColor(UIColor.getCustomBlueColor(), forState: .Normal)

最初にUIColorインスタンスを作成する必要はありません。

47
Martin R

Swift 3の場合、事前定義されたUIColorsが適宜使用されます。

var myColor: UIColor = .white // or .clear or whatever

したがって、次のような同様のものが必要な場合...

var myColor: UIColor = .myCustomColor

...次に、拡張を次のように定義します。

extension UIColor
    {
    public class var myCustomColor: UIColor
        {
        return UIColor(red: 248/255, green: 248/255, blue: 248/255, alpha: 1.0)
        }
    }

実際、Appleは白を次のように定義します:

public class var white: UIColor
24
Gene Loparco

Swift 3、Swift 4:

extension UIColor {
   static let myBlue = UIColor(red:0.043, green:0.576 ,blue:0.588, alpha:1.00) 
}

使用する:

btnShare.setTitleColor(.myBlue, for: .normal)

または

self.view.backgroundColor = .myBlue
18
Yurii Radchenko

次のようにステートメントを変更するだけです。

 btnShare.setTitleColor(UIColor().getCustomBlueColor(), forState:.Normal)

より詳細な説明は here です。

2
itsji10dra

カスタマイズタイプUIViewのこの拡張機能を取得します

extension UIColor {
    // Method returns a custom color
    static func rgb(red: CGFloat, green: CGFloat, blue: CGFloat) -> UIColor {
        return .init(red: blue / 255, green: green / 255, blue: blue / 255, alpha: 1.0)
    }
}
1
Israel Manzo

インスタンス関数を定義しました。 getCustomBlueColor()- methodを使用するには、UIColorのインスタンスが必要であることを意味します。

インスタンスメソッドではなくクラスメソッドが必要なようです。したがって、次のように定義を変更する必要があります。

extension UIColor{
    class func getCustomBlueColor() -> UIColor{
        return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)
    }
}

Funcの前の「クラス」に注意してください。これで、メソッドにクラスメソッドとしてアクセスできるようになりました。

構造でクラスメソッドを使用した同じストーリー:

struct MyColors{
    static func getCustomBlueColor() -> UIColor{
        return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)
    }
}
let color = MyColors.getCustomBlueColor()

いくつかの色定義を持つクラスが必要なだけの場合は、クラスまたは拡張よりも構造体を使用することをお勧めします。

struct MyColors{
    static var getCustomBlueColor = { return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00) }
}
let color = MyColors.getCustomBlueColor()
1
i89

Swift:

extension UIColor {
    open class var yourOrange: UIColor {
        return UIColor.init(colorLiteralRed: 0.988, green: 0.337, blue: 0.063, alpha: 1)
    }
} 
0
Juan Boero

計算されたプロパティを使用できます:

extension UIColor {
  var customBlueColor: UIColor {
    return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)
  }
}

そしてそれを呼び出すには:

UIColor().customBlueColor
0
Eric Hodgins