我找到this question并试图将代码复制到我的Xcode项目中,但是我收到以下错误消息。
错误:使用未解析的标识符'self'
什么是正确的方式?
编辑:这里是在游乐场测试的代码:
//: Playground - noun: a place where people can play
import Cocoa
import Foundation
func sayHello() {
print("hello World")
}
var SwiftTimer = NSTimer()
SwiftTimer = NSTimer.scheduledTimerWithTimeInterval(1, target:self, selector: Selector("sayHello"), userInfo: nil, repeats: true)
答案 0 :(得分:0)
通常在属性名称中使用大写字母它被认为是一种不好的态度,你应该使用swiftTimer。
顶层不允许使用这些表达式:
var swiftTimer = NSTimer()
swiftTimer = NSTimer.scheduledTimerWithTimeInterval(1, target:self, selector: Selector("sayHello"), userInfo: nil, repeats: true)
你必须把它放在一个函数中,例如:
override func viewDidLoad() {
super.viewDidLoad()
var swiftTimer = NSTimer()
swiftTimer = NSTimer.scheduledTimerWithTimeInterval(1, target:self, selector: Selector("sayHello"), userInfo: nil, repeats: true)
}
答案 1 :(得分:0)
self
是指定义了方法(在类中定义的函数)的对象,因此只能在方法中使用。 (它相当于C ++ / Java / Javascript中的this
。)在您的代码中,sayHello()
是一个全局函数,而不是一个方法,因此没有self
可以引用。
为了使scheduledTimerWithTimeInterval()
函数调用能够使用这些参数,必须在实例方法中调用它,以便有self
,并且该类必须具有名为{{1的方法}}
只要该对象具有sayHello()
方法,您也可以将target:
更改为其他对象。
答案 2 :(得分:0)
基本上,异步计时器在Playground中不起作用,因为Playground的顶层不是类,所以没有[
[2, {'id': 1, 'first_name': 'Jhon', 'last_name': 'Smith'}],
[1, {'id': 2, 'first_name': 'Jeff', 'last_name': 'Levi'}],
[1, {'id': 3, 'first_name': 'Jhon'}]
]
属性。
在游乐场中测试self
NSTimer
。XCPlaygound
以启用对异步任务的支持。