2016-05-22 11 views
1

this questionが見つかりました。コードをXcodeプロジェクトにコピーしようとしましたが、次のエラーメッセージが表示されます。NSTimerを使用した繰り返し機能が失敗しました:

error: use of unresolved identifier '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

@AlessandroOrnano私は質問を編集しました – HelloToYou

答えて

0

は、あなたがswiftTimerを使用する必要があり、悪い態度とみなすの名前。

これらの表現は、広告トップレベルの許可されていません。

​​

あなたは例えばのような関数にそれを置く必要があります。

override func viewDidLoad() { 
     super.viewDidLoad() 
     var swiftTimer = NSTimer() 
     swiftTimer = NSTimer.scheduledTimerWithTimeInterval(1, target:self, selector: Selector("sayHello"), userInfo: nil, repeats: true) 
} 
0

selfはのための方法であって、(aオブジェクトを参照しますクラス内で定義された関数)が定義されているため、メソッド内でのみ使用できます。 (これはC++/Java/Javascriptのthisに相当します)コードでは、sayHello()はメソッドではなくグローバル関数であるため、参照するselfはありません。

scheduledTimerWithTimeInterval()関数呼び出しがそれらの引数で機能するには、selfが存在するようにインスタンスメソッド内で呼び出され、そのクラスのメソッドがsayHello()である必要があります。

sayHello()メソッドを持つ限り、target:を別のオブジェクトに変更することもできます。

0

基本的に、非同期タイマーはプレイグラウンドでは機能しません。また、Playgroundのトップレベルはクラスではないため、selfプロパティはありません。

は遊び場

  • ラップでクラスのタイマーをNSTimerをテストします。
  • インポートXCPlaygound
  • XCPlaygroundPage.currentPage.needsIndefiniteExecution = trueを追加すると、非同期タスクをサポートできます。
関連する問題