我正在尝试将某些函数转换为具有相同名称的计算属性,但是出现以下错误:
无效的'name()'声明
(有关我尝试的代码的简化版本,请参见下面的代码示例)
当前,我的代码中仅包含该函数,但想将其替换为属性版本。我需要一段时间支持该功能,并且不想更改名称,因为这是消费者习惯的名称。关于如何实现这一目标的任何想法?
简化的代码示例:
class Person {
private var _name: String?
public var name: String? {
return _name
}
@available(*, deprecated, message: "Use name property")
public func name() -> String? {
return name
}
}
我要从person.name()移到person.name
答案 0 :(得分:2)
不幸的是,这是不可能的,如果您不想更改name
,则必须为新的name()
属性输入一个不同的名称。
原因是给定的
class Person {
func name() -> String { return "Joe" }
}
这是有效的代码:
let p = Person()
let name = p.name() // a String
let nameFun = p.name // a function returning a String
并引入不同类型的Person.name
会产生冲突。