How to add variable in existing class in swift?

妖精的绣舞 提交于 2021-02-05 05:27:05

问题


I know that in swift we can use Extensions to add new methods to existing classes.

But what about if i want to add a variable?

extension UIViewController {

    var myVar = "xyz"
}

It gives like :

Extensions must not contain stored properties


回答1:


We can't add the stored properties to extensions directly but we can have the computed variables.

Extensions in Swift can:

  • Add computed instance properties and computed type properties
  • Define instance methods and type methods
  • Provide new initializers
  • Define subscripts
  • Define and use new nested types
  • Make an existing type conform to a protocol

For more please visit

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




回答2:


You can only add computed properties to extensions as follows...

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

If you wish to use it the way you are defining it, you might need to subclass your UIViewController

class YourCustomViewController: UIViewController {
    var someProperty: String = "xyz"
}



回答3:


you can only use computed variables: for example we have the type Int in swift, and we want it extend in a way that swift generates a random number from 0 to our number :

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}
    }
}

and usage :

myArray.count.arc4random

here my array.count is an Int , and arc4random is the computed variable we have defined in our extension, u cant store a value in it




回答4:


You can try ( This is a readOnly computed property )

extension UIViewController {

    var someProperty : String {

        return "xyz"
    }
}


来源:https://stackoverflow.com/questions/52972231/how-to-add-variable-in-existing-class-in-swift

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!