在Swift中是否可以不赞成使用函数并将其替换为具有相同名称的计算属性?

时间:2018-10-09 12:05:54

标签: swift4

我正在尝试将某些函数转换为具有相同名称的计算属性,但是出现以下错误:

  

无效的'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

1 个答案:

答案 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会产生冲突。