2014-10-10 4 views
0

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

extension String { 
var index: Int { 
    get { 
     return self.index 
    } 
    set { 
     self.index = newValue 
    } 
} 
} 

var o: String = "tre" 


o.index = 87 // crash here 
println(o.index) // Even here 

я попробовал все, без какого-либо успеха. Заранее благодарим за помощь.

+1

Просто интересно, каким образом 'index' имеет какое-либо отношение к' String'? IOW, что вы пытаетесь выполнить? – zaph

+0

Я хотел добавить новое свойство с именем index или что-то еще, в класс String. Это звучит как невозможно. В любом случае, это неважно. – user2724028

+0

Пожалуйста, не добавляйте метод расширения к классу, если только из имени не понятно, что он делает. 'String' - особенно плохое место для индекса' index', поскольку они могут содержать символы переменной длины. – zaph

ответ

0

Вы не можете добавлять новые сохраненные переменные к типу с использованием расширений.

0

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

Вы не можете добавлять новые сохраненные свойства с расширением, только вычисляемые, которые не подкреплены свойством.

+0

Не знаю, почему для этого нет ошибок/предупреждений компилятора, но вы можете сделать то же самое в Objective-C, если вы устанавливаете/получаете свойство внутри setter/getter, не используя непосредственно переменную экземпляра. – Kirsteins

+1

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

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