UIColor'un SWIFT'deki uzantısına nasıl erişilir?

hızlı bir şekilde UIColor sınıfının bir uzantısını oluşturmaya çalışırken çok yeniyim

extension UIColor{

    func getCustomBlueColor() -> UIColor{

    return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)

    }

Bundan sonra yöntem olarak erişildi

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

Bu ifadeye argüman olarak neyi geçirmem gerektiğini bilmiyorum.

16
katma yazar Juan Boero, kaynak
hiç bir argüman iletmemelisiniz, sadece UIColor.getCustomBlueColor() 'u arayın.
katma yazar tkanzakic, kaynak
@tkanzakic, bu şekilde erişmek için sınıf func olması gerekmez mi? - Kullanıcılar örneğine UIColor (). GetCustomBlueColor() gibi erişilmesi gerekir.
katma yazar Wez, kaynak
yeah..wezly bu yüzden sınıf tipine değil, sınıf tipine nasıl erişeceğimi buldum.
katma yazar user4790024, kaynak

7 cevap

Bir örnek yöntemi tanımladınız, bu da arayabileceğiniz anlamına gelir yalnızca bir UIColor örneğinde:

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

Derleyici hatası "eksik argüman" oluşur çünkü Swift'de Örnek Yöntemleri Kıvrılmış İşlevlerdir , bu yüzden eşit olarak adlandırılabilir

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

(Ama bu yapılacak garip bir şey olurdu ve ben sadece ekledim Hata mesajının nereden geldiğini açıklayın.)


Ancak, gerçekten istediğiniz şey bir tür yöntemi ( sınıf func ).

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

hangi denir

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

önce bir UIColor örneği oluşturmanıza gerek kalmadan.

41
katma
@copeME: Şu anda Xcode 6.3’e erişimim yok, bu yüzden bunu daha sonra kontrol edebilirim. Ancak, yalnızca derleyici hata mesajını açıklamak için let col = UIColor.getCustomBlueColor (UIColor ()) 'dan bahsettim, aslında yapmanız gereken bu değil. Bunu gerçekten class ile bir tür yöntemi olarak tanımlamanız gerekir.
katma yazar Martin R, kaynak
@copeME: Haklısınız, "curried function example" içinde bir hata oluştu.
katma yazar Martin R, kaynak
Teşekkürler martin beni şimdi netleştiriyor ... ama bu ifade tam xcode 6.3 üzerinde derlemiyor let col = UIColor.getCustomBlueColor (UIColor ())
katma yazar user4790024, kaynak
evet, bir örnek yöntem olduğu zaman nasıl erişileceği konusunda bir deneme yapıyordum .. teşekkürler
katma yazar user4790024, kaynak

Swift 3 ile önceden tanımlanmış UIColors buna göre kullanılır:

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

Bu nedenle, benzer bir şey istiyorsanız, aşağıdaki gibi ...

var myColor: UIColor = .myCustomColor

... sonra, uzantıyı şöyle tanımlayacaksınız:

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

Aslında, Apple beyazı şöyle tanımlar:

public class var white: UIColor
21
katma
yüzyılda en iyi cevap. teşekkür ederim
katma yazar Sipho Koza, kaynak
var myColor = UIColor.myCustomColor çok daha uygun bir FYI'dir. Her zaman açık tip döküm üzerinde tür çıkarımı kullanmalısınız. Bu, Apple'ın sağladığı Swift kitabının sayısız alanında belgelenmiştir ve WWDC kuralları sırasında en iyi uygulama olarak kabul edilmiştir.
katma yazar TheCodingArt, kaynak
Yaptığım şey aslında fikir değildi. Doğrudan Apple tarafından sunulan ve birçok alanda belgelendirilmiş önerilerden bir görüş oluşturulamamaktadır, ancak size oy veren kişi olduğumu varsaymak suretiyle bir varsayım yapılmaktadır. Uygun tavsiye edilen Swift API'si ve genel kullanım kılavuzları hakkında daha fazla bilgi edinmek istiyorsanız, Apple başvuru için kamuya açık birçok kaynak sağlamıştır. Kişisel tercihlerinizi düzeltmenizi ve tercih ettiğiniz kişisel stilleri takip etmeyi değil, Apple'ın yönergelerini incelemenizi gerçekten tavsiye ederim.
katma yazar TheCodingArt, kaynak
TheCodingArt - bu senin fikrin, bir gerçek değil. Aslında, aşağı oy ve yorumunuz yanıltıcı ve açıkçası sorumsuz. Tür çıkarımı ve açık tip döküm kullanmanın derlenmiş çıktısı aynıdır. Bakınız: stackoverflow.com/questions/24588893/ & hellip; Birincisi, kodumu okuduklarınız üzerinde okunabilirliği tercih ediyorum, ama bu da sizinki gibi, sadece bir fikir.
katma yazar Gene Loparco, kaynak
Yönergeleri kontrol ettim ve Apple'ın birinin her zaman açık türden döküm üzerinde tür çıkarım kullanması gerektiğini belirttiği herhangi bir bölüm bulamıyorum. Bunun neden daha uygun olduğuna dair herhangi bir yazı veya açıklama da görmedim. Eğer "en iyi uygulama" ise, tanım gereği bir fikir değil, bir gerçek. Son yorumumda, her ikisinin de aynı çıktıyı derlediğini gösteren bir bağlantı sağladım. Aldığın şeyin ne olduğuna dair bir bağlantı sağladıysan yardımı olurdu.
katma yazar Gene Loparco, kaynak

Swift 3:

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

kullanın:

btnShare.setTitleColVeya(.myBlue, fVeya: .nVeyamal)

Veya

self.view.backgroundColVeya = .myBlue
10
katma

Sadece ifadeni değiştirmen gerekiyor,

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

Daha ayrıntılı açıklama buradaki .

2
katma
teşekkürler Ronit ... şimdi beni netleştirir
katma yazar user4790024, kaynak

Bir örnek işlevi tanımladınız. Bu, getCustomBlueColor() -method öğesini kullanmanız durumunda, UIColor örneğine ihtiyacınız olduğunu gösterir.

Örnek yöntem yerine bir sınıf yöntemine sahip olmak istediğinize benziyor. Yani tanımınızı şu şekilde değiştirmelisiniz:

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

Func'tan önceki 'class'ı not alın, böylece yönteme şimdi bir sınıf yöntemi olarak erişilebilir.

Bir yapıda sınıf yöntemlerini kullanarak aynı hikaye:

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

Sadece bazı renk tanımlarıyla bir sınıfa sahip olmak istiyorsanız, bir sınıf veya uzantı üzerinde yapı kullanmanızı öneririz:

struct MyColors{
    static var getCustomBlueColor = { return UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00) }
}
let color = MyColors.getCustomBlueColor()
1
katma
teşekkürler :-) gerçekten yığın akışında yeniyim, biçimlendirme hataları yaptığım için çok üzgünüm
katma yazar Chuck, kaynak
Merhaba @Chuck. Cevabınızı biçimlendirdim. Sadece bir bak!
katma yazar 13th Ghost, kaynak

Swift:

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

Hesaplanan bir özellik kullanılabilir mi:

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

Ve sonra aramak için:

UIColor().customBlueColor
0
katma