【问题标题】:How to add variable in existing class in swift?如何快速在现有类中添加变量?
【发布时间】:2019-03-29 01:26:26
【问题描述】:

我知道在 swift 中我们可以使用Extensions 向现有类添加新方法。

但是如果我想添加一个变量呢?

extension UIViewController {

    var myVar = "xyz"
}

它给出了这样的:

扩展不能包含存储的属性

【问题讨论】:

  • 始终将代码、数据、日志、错误消息等作为文本(而非图像)发布,以便它们可以搜索,并且可以在回答时复制。请edit你的问题
  • 在一个extension中你只能添加计算属性——如果你需要一个新属性,inheritance也是你的朋友。
  • 为什么要投反对票?,有什么问题吗?
  • @guru :看看下面发布的答案,它显示了多年来在Objective-C世界和swift世界中为扩展添加存储属性的工作:)让我知道如果有任何帮助\

标签: ios swift extension-methods


【解决方案1】:

我们不能直接将stored properties 添加到extensions,但我们可以拥有computed variables

extension UIViewController {
    var myVar: String {
        return "xyz"
    }
}

Swift 中的扩展可以:

  • 添加计算实例属性和计算类型属性
  • ...

更多信息请访问

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

【讨论】:

    【解决方案2】:

    您只能使用计算变量: 例如,我们在 swift 中有 Int 类型,我们希望它以 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 是一个 Intarc4random 是我们在扩展中定义的计算变量,你不能在里面存储一个值

    【讨论】:

      【解决方案3】:

      你可以试试(这是一个只读计算属性)

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

      【讨论】:

        【解决方案4】:

        您只能将计算属性添加到扩展中,如下所示...

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

        如果您希望按照定义的方式使用它,您可能需要继承 UIViewController

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

        【讨论】:

          猜你喜欢
          • 2012-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-13
          相关资源
          最近更新 更多