2015-08-06 5 views
-3

я не понимаю = redSwift INIT не понимаю

struct Color { 
    let red, green, blue: Double 
    init(red: Double, green: Double, blue: Double) { 
     self.red = red 
     self.green = green 
     self.blue = blue 
    } 
} 
+3

Что вы не понимаете в отношении self.red? И каков ваш вопрос, на самом деле? – courteouselk

+1

Я бы рекомендовал загрузить бесплатную книгу Swift от Apple и дать ей хорошее чтение. –

ответ

0

структур (struct) в Swift ведут себя очень похоже на Class и могут содержать методы, такие как инициализаторе.

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

Помимо этого, обратитесь к документации Apple Swift.

2

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

Рассмотрим примеры вы объявили в вашем struct

let red, green, blue: Double 

означает, что они еще не инициализированы, так что вы должны начать его с init() таким образом:

init(red: Double, green: Double, blue: Double) { 
    self.red = red  //when you will initialise struct self.red will get it's value 
    self.green = green  //when you will initialise struct self.green will get it's value 
    self.blue = blue  //when you will initialise struct self.blue will get it's value 
} 

Теперь, когда все вы используете struct с новой переменной:

let foo = Color(red: 1.0, green: 1.0, blue: 1.0) 

вы должны дать ему это экземпляры значения это путь

Color(red: 1.0, green: 1.0, blue: 1.0)

и вы не можете инициализировать его таким образом:

let test = Color() 

И это даст вам ошибку.

Но помните:

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

Это означает, что если назначить значения по умолчанию для экземпляров struct так:

struct Color { 
    let red : Double = 1.0 
    let green : Double = 1.0 
    let blue: Double = 1.0 
} 

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

let foo = Color() 

, и это даст вам результат {red 1, green 1, blue 1}

, и вы можете присвоить значение STRUCT экземпляров следующим образом:

struct Color { 
    var red : Double = 1.0 
    var green : Double = 1.0 
    var blue: Double = 1.0 
} 

var test = Color()  //{red 1, green 1, blue 1} 
test.red = 2.0   //{red 2, green 1, blue 1} 
test.green = 2.0  //{red 2, green 2, blue 1} 
test.blue = 2.0  //{red 2, green 2, blue 2} 
0

переменных красные, зеленый и синий объявлены в структуре. и вы пытаетесь получить к ним доступ в методе init.

so self.red ссылается на переменную экземпляра этого конкретного объекта структуры.

, например, если создать два экземпляра структуры Color

var color1 = Color(26,120,180); 
var color2 = Color(160,120,180); 
println(color1.red);//will print 26 
println(color2.red);//will print 160 

в приведенном выше примере:

линии 1: он будет называть Init() метод инициализирует структуры в этом вызов метода самости относится к экземпляру color1 структуры Color.

строка 2: он вызовет метод init() для инициализации структуры в этом методе. Вызов self относится к экземпляру color2 структуры Color.

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

надеюсь, это ясно. Дайте мне знать в случае каких-либо сомнений.

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