2016-05-22 2 views
1

Я нашел this question и попытался скопировать код в проект Xcode, но я получаю следующее сообщение об ошибке.Функция повторения с использованием NSTimer с целью: self in Swift

error: use of unresolved identifier 'self'

Каков правильный путь?

EDIT: Вот код, испытанные в детской площадки:

//: 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.

Эти выражения не допускаются объявление верхнего уровня:

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

self относится к объекту, для которого метод (а функция, определенная внутри класса), поэтому ее можно использовать только в методе. (Это эквивалент в C++/Java/Javascript.) В вашем коде sayHello() является глобальной функцией, а не методом, поэтому для ссылки на нее нет self.

Для того, чтобы вызов на scheduledTimerWithTimeInterval() функций для работы с этими аргументами, он должен быть вызван в качестве метода экземпляра, так что есть self, и что класс должен иметь метод с именем sayHello().

Вы также можете изменить target: на другой объект, если этот объект имеет метод sayHello().

0

В основном асинхронный таймер не работает на игровой площадке, а поскольку верхний уровень игровой площадки не является классом, то нет self.

NSTimer Чтобы проверить в Playground

  • Wrap таймер в классе.
  • Импорт XCPlaygound.
  • Добавить XCPlaygroundPage.currentPage.needsIndefiniteExecution = true, чтобы включить поддержку асинхронных задач.