2015-06-15 20 views
12

Tôi đang tìm cách thêm trình khởi tạo mặc định vào giao thức qua tiện ích mở rộng giao thức.Vấn đề tham chiếu giao thức Swift tự mở rộng với init

giao thức của tôi là:

protocol TestProtocol { 
    var myVar : Double { get set } 
    init(value: Double) 
    init(existingStruct : TestProtocol) 
} 

Tôi đã thực hiện một cấu trúc sử dụng giao thức này như:

struct TestStruct : TestProtocol { 
    var myVar : Double 

    init(value : Double) { 
     myVar = value 
    } 

    init (existingStruct : TestProtocol) { 
     myVar = existingStruct.myVar 
    } 
} 

Tuy nhiên nếu tôi cố gắng qua mở rộng để thực hiện một khởi tạo mặc định cho giao thức này tôi gặp vấn đề về bản thân:

extension TestProtocol { 
    init(value : Double) { 
     myVar = value 
    } 

    init(existingStruct : TestProtocol) { 
     myVar = existingStruct.myVar 
    } 
} 

Whe tái cả hai dòng phân cấp lỗi Biến 'tự' thông qua tham khảo trước khi được khởi tạo

Có cách nào để làm cho công việc này - hoặc am i hạn chế việc sử dụng các lớp học?

enter image description here

+0

Đó có phải là xcode với chủ đề monokai không? Tôi muốn nó! <3 – Kutyel

+0

https://github.com/b0ti/xcode-monokai-revisited – Jeef

+3

Ups, làm thế nào bạn có thể đảm bảo rằng loại bê tông áp dụng 'TestProtocol' sẽ được khởi tạo hoàn toàn bởi' init' trong phần mở rộng giao thức? đặc biệt đối với các loại giá trị (ví dụ: cấu trúc hoặc enums). –

Trả lời

23

Câu hỏi của bạn là gần như giống nhau như trong post này tôi đã trả lời ngày hôm qua.

Đây là mẹo để giải quyết này :)

protocol TestProtocol { 
    var myVar : Double { get set } 
    init() // designated initializer which will ensure that your class or structer type will instantiate correctly 
} 

struct TestStruct : TestProtocol { 
    var myVar : Double 

    init() { 
     myVar = 0 
    } 
} 

extension TestProtocol { 
    init(value : Double) { 
     self.init() 
     myVar = value 
    } 

    init(existingStruct : TestProtocol) { 
     self.init() 
     myVar = existingStruct.myVar 
    } 
} 

Chúc một ngày tốt. :) Giao thức mở rộng rất đẹp.

+3

Chúc bạn một ngày tốt lành. – user1447414

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