gpt4 book ai didi

ios - 尝试调用分配给函数的变量时出错

转载 作者:搜寻专家 更新时间:2023-11-01 07:22:26 25 4
gpt4 key购买 nike

在 Playground 上,我正在创建一个简单的类:

class myClass {

let name: String
let text: String?

var placeHolder = myfunc

init(name: String, text: String? = nil) {
self.name = name
self.text = text
}

func myfunc(string: String) -> String {
print("you passed \(string)")

return " "
}

deinit {
print("\(name) is being deinitialized")
}

}

我正在使用名为 placeHolder 的变量调用 myFunc

test!.placeHolder("this is a test")

但是,我遇到了这个错误

cannot convert value of type 'String' to expected argument type 'myClass'

但是,如果我从 myClass 中删除 var placeHolder = myfunc 并执行此操作

class myClass {

let name: String
let text: String?

// Remove this line
// var placeHolder = myfunc

init(name: String, text: String? = nil) {
self.name = name
self.text = text
}

func myfunc(string: String) -> String {
print("you passed \(string)")

return ""
}

deinit {
print("\(name) is being deinitialized")
}

}

var test: myClass? = myClass(name: "p", text: "hello, world")

let placeHoder = test!.myfunc
placeHoder("this is test")

它会起作用

我真的不明白为什么我必须在第一种情况下将 myClass 对象作为参数而不是字符串传递。有没有人对此有任何想法。

最佳答案

如果你选项点击placeHolder你会看到它的类型:

var placeHolder: (myClass) -> (String) -> String

这意味着,如果您给 placeHolder 一个 myClass 的实例,它将返回一个类型为 (String) -> String 的函数.

这就是在对象上调用实例方法的方式。您可以通过提供对象的实例来调用该函数。

通常你会这样调用myFunc:

test!.myfunc("this is a test")

但这等同于:

myClass.myfunc(test!)("this is a test")

因此,您可以像这样使用 placeHolder:

test!.placeHolder(test!)("this is a test")

如果将 myfunc 设为 static 函数:

static func myfunc(string: String) -> String {
print("you passed \(string)")

return ""
}

然后更改 placeHolder 以引用它:

var placeHolder = myClass.myfunc

那么你可以这样调用它:

test!.placeHolder("this is a test")

因为作为一个static func,您不提供调用该函数的实例。

关于ios - 尝试调用分配给函数的变量时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38112954/

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