私は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)
このステートメントの引数として何を渡すべきかわかりません。
インスタンスメソッドを定義しました。つまり、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
インスタンスを作成する必要はありません。
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
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
次のようにステートメントを変更するだけです。
btnShare.setTitleColor(UIColor().getCustomBlueColor(), forState:.Normal)
より詳細な説明は here です。
カスタマイズタイプ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)
}
}
インスタンス関数を定義しました。 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()
Swift:
extension UIColor {
open class var yourOrange: UIColor {
return UIColor.init(colorLiteralRed: 0.988, green: 0.337, blue: 0.063, alpha: 1)
}
}
計算されたプロパティを使用できます:
extension UIColor {
var customBlueColor: UIColor {
return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)
}
}
そしてそれを呼び出すには:
UIColor().customBlueColor