gpt4 book ai didi

ios - “Static member ' … ' cannot be used on instance of type ' … '”

转载 作者:行者123 更新时间:2023-11-28 23:36:41 25 4
gpt4 key购买 nike

我有一系列抽象类,我想实现它来根据创建的实例执行任务。但是,当我尝试使用声明为基类的变量调用该方法时,我得到“静态成员 '...' 不能在类型 '...' 的实例上使用”

部分代码如下所示

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")
}
}

该变量被声明为我的 View Controller 之一的属性,

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 声明为实例方法并覆盖它(在任何情况下都必须这样做)

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")
}
}

或者反过来将类型放入变量并调用该类型的方法

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()

关于ios - “Static member ' … ' cannot be used on instance of type ' … '”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54750148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com