2016-06-05 34 views
5
ben MyFramework bazı varsayılan davranışlar

protokol uzantısı, protokol

import UIKit 

public protocol LoginProtocol { 
    func appBannerImage() -> UIImage? 
    func appLogoImage() -> UIImage? 
} 


extension LoginProtocol { 
    func appBannerImage() -> UIImage? { 
     return (UIImage(named: "login_new_top")) 
    } 

    func appLogoImage() -> UIImage? { 
     return (UIImage(named: "appLogo")) 

    } 
} 

Sonraki, ben kullanan MyDemoApp adlı bir demo uygulama oluşturmak için yeni bir hedef ekliyorum sahiptir LoginProtocol.swift içeren adında bir çerçeve oluşturma

uymuyor MyFramework: Şu

import UIKit 
import MyFramework 

class LoginViewContainer: UIViewController, LoginProtocol {  
    // I think I am fine with defaults method. But actually getting an error 
} 

, böyle

olarak derleyici bir hata alıyorum
type 'LoginViewContainer does not conform protocol 'LoginProtocol' 

ben çünkü protokol uzantılı bu mesajı alıyorum neden emin değilim, sınıf

Bu konuda bazı tavsiyelerde alabilirsiniz eğer iyi olurdu

issue.Thanks protokolleri uyması gerekmez

PS: this bu kodların bağlantısıdır. ona bakmaktan çekinmeyin.

+3

Uzantınız originaluser2 @ – Hamish

+0

kamu değildir: iyi bir av

çözüm bu nedenle sadece uzatma halkı yapmaktır. Cevabını takdir et. Beni saatlerden kurtarıyorsun. – tonytran

+0

Teknik olarak bir cevap değil;) Yardım etmekten mutluluk duyuyorum, şimdi soruyu silmek için çekinmeyin - başkaları için yararlı olacağını düşünmediğiniz sürece, ben * gerçek bir cevap yazabilirim. Önemli olan, bu sorunun dış dünyaya 'çözülmemiş' görünmemesidir. – Hamish

cevap

6

Sorun şu ki, extension öğenizin genel değil - bu nedenle tanımlandığı modülün dışında görünmez, bu durumda MyFramework.

Bu, görünüm denetleyicinizin yalnızca LoginProtocol tanımını bildiği anlamına gelir (bu numarası geneldir), ancak varsayılan uygulama değil. Bu nedenle derleyici uygulanmayan protokol yöntemlerinden şikayetçidir.

public extension LoginProtocol { 
    func appBannerImage() -> UIImage? { 
     return (UIImage(named: "login_new_top")) 
    } 

    func appLogoImage() -> UIImage? { 
     return (UIImage(named: "appLogo")) 

    } 
} 
İlgili konular