“静态成员 '...' 不能用于类型 '...' 的实例”
“Static member '…' cannot be used on instance of type '…'”
我有一系列抽象 classes 我想实现以根据创建的实例执行任务。但是当我尝试使用声明为基础的变量调用方法时 class 我得到“静态成员'...'不能用于类型'...'的实例”
部分代码如下所示
class BaseClass{
class func theTask(){
print("do nothing")
}
}
class SubClassA: BaseClass{
class func theTask(){
print("do class A task")
}
}
class SubClassB: BaseClass{
class func theTask(){
print("do class B task")
}
}
该变量被声明为我的一个 viewController 的 属性,
class SecondViewController: UIViewController {
var theObject: BaseClass = BaseClass()
override func viewDidLoad() {
super.viewDidLoad()
if(mysettings.selectedPort ==1){
theObject = SubClassA()
}else{
theObject = SubClassB()
}
configureUIElements()
}
@IBAction func scanButtonPressed(_ sender: Any) {
let devices = self.theObject.theTask()
}
}
那一行
let devices = self.theObject.theTask()
是给我错误的那个
静态成员 'theTask' 不能用于类型 'BaseClass'
的实例
我来自 C++,所以这种编码很常见,但 Swift 似乎不喜欢它。
当您创建和使用 类 的实例时,您必须将 theTask
声明为 instance 方法并覆盖它(您必须这样做无论如何)
class BaseClass{
func theTask(){
print("do nothing")
}
}
class SubClassA: BaseClass{
override func theTask(){
print("do class A task")
}
}
class SubClassB: BaseClass{
override func theTask(){
print("do class B task")
}
}
或者反过来将 type 放入变量并调用 type
上的方法
class BaseClass{
class func theTask(){
print("do nothing")
}
}
class SubClassA: BaseClass{
override class func theTask(){
print("do class A task")
}
}
class SubClassB: BaseClass{
override class func theTask(){
print("do class B task")
}
}
...
var theObject: BaseClass.Type = BaseClass.self
...
if mysettings.selectedPort == 1 {
theObject = SubClassA.self
}else{
theObject = SubClassB.self
}
...
let devices = theObject.theTask()
您可以使用 type(of:) 来完成。
按照你的例子:
type(of: theObject).theTask()
我有一系列抽象 classes 我想实现以根据创建的实例执行任务。但是当我尝试使用声明为基础的变量调用方法时 class 我得到“静态成员'...'不能用于类型'...'的实例”
部分代码如下所示
class BaseClass{
class func theTask(){
print("do nothing")
}
}
class SubClassA: BaseClass{
class func theTask(){
print("do class A task")
}
}
class SubClassB: BaseClass{
class func theTask(){
print("do class B task")
}
}
该变量被声明为我的一个 viewController 的 属性,
class SecondViewController: UIViewController {
var theObject: BaseClass = BaseClass()
override func viewDidLoad() {
super.viewDidLoad()
if(mysettings.selectedPort ==1){
theObject = SubClassA()
}else{
theObject = SubClassB()
}
configureUIElements()
}
@IBAction func scanButtonPressed(_ sender: Any) {
let devices = self.theObject.theTask()
}
}
那一行
let devices = self.theObject.theTask()
是给我错误的那个 静态成员 'theTask' 不能用于类型 'BaseClass'
的实例我来自 C++,所以这种编码很常见,但 Swift 似乎不喜欢它。
当您创建和使用 类 的实例时,您必须将 theTask
声明为 instance 方法并覆盖它(您必须这样做无论如何)
class BaseClass{
func theTask(){
print("do nothing")
}
}
class SubClassA: BaseClass{
override func theTask(){
print("do class A task")
}
}
class SubClassB: BaseClass{
override func theTask(){
print("do class B task")
}
}
或者反过来将 type 放入变量并调用 type
上的方法class BaseClass{
class func theTask(){
print("do nothing")
}
}
class SubClassA: BaseClass{
override class func theTask(){
print("do class A task")
}
}
class SubClassB: BaseClass{
override class func theTask(){
print("do class B task")
}
}
...
var theObject: BaseClass.Type = BaseClass.self
...
if mysettings.selectedPort == 1 {
theObject = SubClassA.self
}else{
theObject = SubClassB.self
}
...
let devices = theObject.theTask()
您可以使用 type(of:) 来完成。
按照你的例子:
type(of: theObject).theTask()