2016-02-15 6 views
0

Ниже код не компилируется для меня:Доступ быстрые методы расширения класса внутри исходного класса

import Foundation 
@objc public protocol MyProtocol { 
    func protocolMethod(parameter: (String)) -> String 
    func anotherProtocolMethod() -> Int 
} 
class MyClass: NSObject { 
    var myValue = self.anotherProtocolMethod() 
} 
extension MyClass: MyProtocol { 
    func protocolMethod(parameter: (String)) -> String { 
     return "" 
    } 

    func anotherProtocolMethod() -> Int { 
     return 1 
    } 
} 

Ошибка возникает на линии MyValue назначен, он читает: об ошибке: значение типа «NSObject - >() -> MyClass не имеет другого пользователяProtocolMethod

Есть ли способ сделать эту работу без перемещения myValue в расширение класса?

ответ

1

Это не имеет никакого отношения к расширению. Эта линия будет незаконным в любом случае:

var myValue = self.anotherProtocolMethod() // an instance property 

Сохраненный экземпляр свойство не может быть непосредственно инициализируется путем вызова метода экземпляра, потому что во время инициализации экземпляра именно то, что еще не существует.

+0

Хорошим решением является объявление свойства 'lazy'. См. Ответ на связанный вопрос. – matt

+0

Или используйте вычисленное свойство вместо хранимого свойства. См. Мою книгу для дальнейшего обсуждения: http://www.apeth.com/swiftBook/ch04.html#_properties – matt

+0

Спасибо за ответ. Вычисленное свойство readonly отлично работает для моего использования. –