提前感谢您的帮助!!
我试图从我的班级中调用一个函数,但我一直收到错误说:
缺少参数#1的参数.............阅读一些帖子说它是一个实例与类的问题?我没有得到它......我在班级内调用该方法???如果调用该方法,则必须有一个类的实例?????对?这是我的代码......谢谢
import Foundation
import Parse
class TestViewController {
let photos = getWallImages() //-----This is the line requesting an argument
func getWallImages() -> [WallPost] {
let query = WallPost.query()!
query.findObjectsInBackgroundWithBlock { objects, error in
if error == nil {
if let objects = objects as? [WallPost] {
return objects
println("We have \(objects.count)")
}
} else if let error = error {
println(error)
}
}
}
}
答案 0 :(得分:1)
有几种方法可以恰当地设置您的财产。您可以将getWallImages()
设为类型方法:
class TestViewController {
let photos = TestViewController.getWallImages()
class func getWallImages() -> [WallPost] {
....
}
}
或者,您可以将方法保留为实例方法,并在初始化时设置属性:
class TestViewController {
let photos: [WallPost]!
init() {
super.init()
photos = getWallImages()
}
func getWallImages() -> [WallPost] {
....
}
}
答案 1 :(得分:1)
所以"犯罪"您提交的是该方法应用于类的实例而不是类方法。该函数需要 self 参数(对实例的引用)。这解释了错误消息。
现在要解决的问题是你有两个快速选择:
1。让它成为一个类函数并以这种方式调用它:
class TestViewController {
let photos = TestViewController.getWallImages()
class func getWallImages() -> [WallPost] {
// mumbo jumbo
}
}
如果你想要做一些特定于实例的操作,这种方法是有问题的,因为class func
是静态方法,并没有为你提供一些对象的好处。
2. 实例化您正在调用方法的对象:
class TestViewController {
let photos = TestViewController().getWallImages()
func getWallImages() -> [WallPost] {
// mumbo jumbo
}
}
这种方法对于您给定的结构并不正确 - 实例化另一个视图控制器没有意义,但是如果您采用该方法并将其放在单独的类中,也许它会有意义。
当然,您还有多种其他方法可以更改代码以使其正常工作。也许您可以使用lazy
参数初始化它,也许您可以在init方法中初始化它。无论什么最适合你。我的回答只是解释你哪里出错了。
答案 2 :(得分:0)
如果您提出问题,则应将代码降至最低,并丢弃不必要的详细信息。
你可能想要这样的东西:
class MyClass {
let x = MyClass.getStuff()
static func getStuff() -> Int {
return 0
}
}
但是,您的方法getWallImages()
无法执行此类操作,因为它会以异步方式返回结果,这意味着您可以在函数返回后稍后获得结果。
你可以做这样的事情(这就是我这样做的方式):
class MyClass {
var x : Int? {
didSet {
if let x = x {
// Do something with x, here it's assigned
} else {
// x was set to nil, something failed
}
}
}
init() {
getStuffAsynchronous()
}
func getStuffAsynchronous() {
// Do your query stuff here, assign x to your objects to invoke the didSet
x = 0
// If it fails somehow, assign set x to nil
// if fail {
// x = nil
// }
}
}