2014-10-17 1 views
1

я создал класс в Swift, как показано ниже, но он дает ошибку:Swift класса «MyClass» не имеет член Названный «my_var»

'ApiUrls.Type' does not have a member named 'webUrl'

Вот мой код:

import UIKit 

class ApiUrls { 

    let webUrl:NSString = "192.168.0.106:8888" 
    var getKey:NSString = webUrl + NSString("dev/sys/getkey") // here comes the error ApiUrls.Type' does not have a member named 'webUrl 

} 

Что в этом плохого?

ответ

5

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

Даже перемещение инициализации свойств в инициализаторе не работает, потому что getKey полагается на webUrl, поэтому getKey не может быть инициализирован, пока сам не инициализируются.

Я вижу, что webUrl является постоянным, поэтому, возможно, это хорошая идея, чтобы сделать это статическое свойство - классы не поддерживают статику как еще, так что лучший способ заключается в использовании приватной структуры:

class ApiUrls { 
    private struct Static { 
     static let webUrl: String = "192.168.0.106:8888" 
    } 

    var getKey: String = Static.webUrl + "dev/sys/getkey" 

} 

Кроме того, если у вас нет веских оснований, лучше использовать быстрые строки, а не NSString.

+0

Спасибо за объяснение –

+0

Отличное решение! – jestro

0

Насколько я знаю, вы не можете инициализировать такие переменные в определении класса.

Попробуйте объявить переменные, как

let webUrl:NSString = "192.168.0.106:8888" 
var getKey:NSString = "" 

и добавить в viewDidLoad

getKey = webUrl + NSString("dev/sys/getkey") 
+0

Я не продлеваю свой класс от UIViewController. поэтому я не могу переопределить метод didViewLoad metho для BTW –

+0

Вы можете сделать это в методе класса init(), тогда .... тот же эффект –

Смежные вопросы