2015-01-28 4 views
0

Я пытаюсь использовать Swift для создания экземпляра класса (класс, являющийся желаемым типом), но казалось бы, что при инициализации экземпляра класс var не применяется к новому экземпляру. Я уверен, что есть вызов инициализации или что-то, что мне не хватает, поэтому любая помощь будет очень полезна.Использование переменных класса в экземпляре класса

class Person: NSObject { 

    private struct personNameStruct { static var _personName: String = "" } 

    class var personName: String 
     { 
     get { return personNameStruct._personName } 
     set { personNameStruct._personName = newValue } 
    } 

} 

var testPerson: Person 
testPerson.personName = "Foo" //"'person' does not have a member named 'personName'" 
+0

Нигде в вашем вы делаете какие-либо экземпляры класса 'person', так что в чем вопрос? – matt

+0

Кроме того, ваш код будет намного легче понять другим, если вы будете соблюдать правила: имена типов начинаются с заглавной буквы. – matt

+0

Я думал, что 'var testPerson: person' создаст экземпляр. [Эта ссылка] (http://stackoverflow.com/questions/24353254/how-to-pass-a-class-and-method-to-create-an-instance-of-a-class), похоже, обсуждает, как создать экземпляр, но кажется неуклюжим ... что это лучший способ сделать это? – mattchue

ответ

1

Участник экземпляра упоминается посредством ссылки на экземпляр.

Член класса упоминается посредством ссылки на класс.

Так, например:

class Dog { 
    class var whatDogsSay : String { 
     return "Woof" 
    } 
    func bark() { 
     println(Dog.whatDogsSay) 
    } 
} 

Чтобы сделать собачий лай, сделать собаку экземпляр и сказать ему лаять:

let d = Dog() 
d.bark() 

Чтобы узнать, что собаки говорят, поговорить собака класс:

let s = Dog.whatDogsSay 
0

Это работает для меня в Playground, если доступ к переменной personName, используя имя класса person, а не имя экземпляра: person.personName = "Foo".

Это связано с тем, что переменная класса в Swift похожа на статическую переменную в таких языках, как Java и C#, поскольку она разделяется между всеми экземплярами этого класса. Если вы просто хотите собственности в своем классе, не следует объявлять ее как class var, а просто var.

+0

Да, но это относится к классу 'person', а не к объекту' testPerson', что означает, что у вас не может быть более одного объекта 'person', или, по крайней мере, так оно и будет. – mattchue

+1

Если я правильно помню, переменная класса в Swift похожа на статическую переменную в таких языках, как Java и C#, поскольку она разделяется между всеми экземплярами этого класса. Если вы просто хотите получить свойство в своем классе, вы не должны объявлять его как 'class var', а просто' var'. – Joru

+1

Это также правильный ответ, если вы измените свой ответ, чтобы отразить это, я буду отмечать его как вторичное решение – mattchue

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