如何在 swift 中的现有 class 中添加变量?
How to add variable in existing class in swift?
我知道在 swift 中我们可以使用 Extensions
向现有 类 添加新方法。
但是如果我想添加一个变量呢?
extension UIViewController {
var myVar = "xyz"
}
它给出了这样的结果:
Extensions must not contain stored properties
你可以试试(这是一个只读的计算属性)
extension UIViewController {
var someProperty : String {
return "xyz"
}
}
您只能按如下方式将计算属性添加到扩展...
extension UIViewController {
var someProperty = "xyz" : String {
return "xyz"
}
}
如果您希望按照您定义的方式使用它,您可能需要继承您的 UIViewController
class YourCustomViewController: UIViewController {
var someProperty: String = "xyz"
}
我们无法将 stored properties
直接添加到 extensions
,但我们可以添加 computed variables
。
extension UIViewController {
var myVar: String {
return "xyz"
}
}
Extensions in Swift can:
- 添加计算实例属性和计算类型属性
- ...
更多请访问
https://docs.swift.org/swift-book/LanguageGuide/Extensions.html
您只能使用计算变量:
例如,我们在 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 是一个 Int
, arc4random
是我们在扩展中定义的计算变量,你不能在其中存储一个值
我知道在 swift 中我们可以使用 Extensions
向现有 类 添加新方法。
但是如果我想添加一个变量呢?
extension UIViewController {
var myVar = "xyz"
}
它给出了这样的结果:
Extensions must not contain stored properties
你可以试试(这是一个只读的计算属性)
extension UIViewController {
var someProperty : String {
return "xyz"
}
}
您只能按如下方式将计算属性添加到扩展...
extension UIViewController {
var someProperty = "xyz" : String {
return "xyz"
}
}
如果您希望按照您定义的方式使用它,您可能需要继承您的 UIViewController
class YourCustomViewController: UIViewController {
var someProperty: String = "xyz"
}
我们无法将 stored properties
直接添加到 extensions
,但我们可以添加 computed variables
。
extension UIViewController {
var myVar: String {
return "xyz"
}
}
Extensions in Swift can:
- 添加计算实例属性和计算类型属性
- ...
更多请访问
https://docs.swift.org/swift-book/LanguageGuide/Extensions.html
您只能使用计算变量:
例如,我们在 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 是一个 Int
, arc4random
是我们在扩展中定义的计算变量,你不能在其中存储一个值