2016-06-05 20 views
5

tôi đang tạo ra một khuôn khổ mang tên MyFramework chứa LoginProtocol.swift trong đó có một số hành vi mặc địnhgiao thức mở rộng, không phù hợp với giao thức

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")) 

    } 
} 

Tiếp theo, tôi đang bổ sung thêm một mục tiêu mới để tạo ra một ứng dụng demo tên MyDemoApp mà đang sử dụng MyFramework:

import UIKit 
import MyFramework 

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

Hiện nay, tôi đang nhận được một lỗi từ trình biên dịch như

type 'LoginViewContainer does not conform protocol 'LoginProtocol' 

Tôi không chắc chắn lý do tại sao tôi nhận được thông báo này vì với phần mở rộng giao thức, các lớp không cần phải phù hợp với các giao thức

Nó sẽ là tuyệt vời nếu tôi có thể nhận được một số lời khuyên về vấn đề này issue.Thanks

PS: this là liên kết cho các mã này. cảm thấy tự do để nhìn vào nó.

+3

phần mở rộng của bạn không được công khai – Hamish

+0

@ originaluser2: nắm bắt tốt. đánh giá cao câu trả lời của bạn. Bạn tiết kiệm cho tôi giờ. – tonytran

+0

Không phải là câu trả lời về mặt kỹ thuật;) Rất vui được trợ giúp, vui lòng xóa câu hỏi ngay bây giờ - trừ khi bạn cảm thấy nó hữu ích cho những người khác trong trường hợp tôi * có thể * viết câu trả lời thực tế. Điều quan trọng là câu hỏi này không xuất hiện 'chưa được giải quyết' với thế giới bên ngoài. – Hamish

Trả lời

6

Vấn đề là extension của bạn không công khai - do đó không hiển thị bên ngoài mô-đun được xác định trong trường hợp này là MyFramework.

Điều này có nghĩa là bộ điều khiển chế độ xem của bạn chỉ biết về định nghĩa LoginProtocol (vì đây là công khai), nhưng không phải là triển khai mặc định. Do đó trình biên dịch phàn nàn về các phương thức giao thức không được triển khai. do đó

Giải pháp là chỉ đơn giản là làm cho công chúng mở rộng:

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

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

    } 
} 
Các vấn đề liên quan