Как добавить переменную в существующий класс в Swift? - PullRequest
0 голосов
/ 24 октября 2018

Я знаю, что в swift мы можем использовать Extensions для добавления новых методов в существующие классы.

Но что если я хочу добавить переменную?

extension UIViewController {

    var myVar = "xyz"
}

Это дает как:

Расширения не должны содержать сохраненные свойства

Ответы [ 4 ]

0 голосов
/ 24 октября 2018

вы можете использовать только вычисляемые переменные: например, у нас есть тип Int в swift, и мы хотим, чтобы он расширялся таким образом, чтобы swift генерировал случайное число от 0 до нашего числа:

extension Int
{
    var arc4random : Int{
        if self > 0
        {return Int(arc4random_uniform(UInt32(UInt(self))))}

         else if self < 0
        {return -Int(arc4random_uniform(UInt32(UInt(abs(self)))))}

        else
        {return 0}
    }
}

и использование:

myArray.count.arc4random

здесь мой array.count - это Int, а arc4random - это вычисленная переменная, которую мы определили в нашем расширении, вы не можете сохранить в ней значение

0 голосов
/ 24 октября 2018

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

extension UIViewController {
   var someProperty = "xyz" : String {
      return "xyz"
   }
}

Если вы хотите использовать его так, как вы его определяете, вам может потребоваться создать подкласс для вашего UIViewController

class YourCustomViewController: UIViewController {
    var someProperty: String = "xyz"
}
0 голосов
/ 24 октября 2018

Мы не можем добавить stored properties к extensions напрямую, но у нас может быть computed variables.

Расширения в Swift:

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

Для получения дополнительной информации посетите

https://docs.swift.org/swift-book/LanguageGuide/Extensions.html

0 голосов
/ 24 октября 2018

Вы можете попробовать (Это вычисляемое свойство только для чтения)

extension UIViewController {

    var someProperty : String {

        return "xyz"
    }
}
...