一尘不染

Swift,变量与方法名相同

swift

我有一个 :

var formVC:UIViewController!

我也试图有一个名为:

func formVC()->UIViewController{....}

我知道在OBJC中它可以工作,但是我没有在Swift中看到一种方法来做到这一点。有办法解决这个问题,还是我不了解Swift中明显的架构/概念更改?

提前致谢。


阅读 191

收藏
2020-07-07

共1个答案

一尘不染

这在ObjC中是个坏主意,在Swift中是非法的。考虑以下一些情况:

class X {
    var value : Int = 0
    func value() -> Int { return 1 }
}
let x = X()

什么是x.value在这种情况下?是Int还是它() -> Int?将类的方法视为闭包是合法且有用的。

如果我们更加棘手,该怎么办:

class X {
    let value: () -> Int = { 2 }
    func value() -> Int { return 1 }
}
let x = X()
let v = x.value() // ????

Swift应该使用该属性value然后调用它吗?还是应该调用该方法value()?闭包作为财产完全合法。

ObjC中实际上存在相同的限制。您也无法创建与方法冲突的综合属性(如果它们具有不同的类型;如果它们具有相同的类型,则ObjC会默默地不合成访问器)。您在考虑Swift属性,就像它们等同于ObjC的ivars,但这是不对的。Swift的属性等同于ObjC的
属性 (即访问ivars的方法)。您无权访问Swift中的基础ivars。

2020-07-07