2015-03-28 3 views
0

Я создал пару глобальных переменных для своего приложения, чтобы загрузить изображение, а также строку. Когда я пытаюсь изменить значение, они остаются неизменными. Значение не изменяется после того, как метод didSelectRowAtIndexPath называется, он все еще «начальный».Глобальные переменные в swift не изменяются

import UIKit 

var testString = "initial" 

class SubjectsViewController: UIViewController { 

..... 

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     tableView.deselectRowAtIndexPath(indexPath, animated: true) 

     imageFiles[indexPath.row].getDataInBackgroundWithBlock { imageData, error in 
      if (error == nil) { 
       selectedPhoto = UIImage(data: imageData)! 
       println("Should change variables") 
       testString = "testing" 
       println("no error in fetching image") 
      } else { 
       println("There is an error getting image") 
      } 
     } 

     self.performSegueWithIdentifier("detailSegue", sender: self) 
    } 
+1

Вы имеете в виду, что не установлен после того, как вам вызвать асинхронную функцию? – Wain

+1

Как вы проверили, что значение не меняется? Знаете ли вы, что 'getDataInBackgroundWithBlock' работает * асинхронно *? Закрытие (которое изменяет глобальную переменную) вызывается в более позднее время, когда данные были получены. - Lookup «возвращаемое значение из асинхронного метода», существует много подобных вопросов и ответов. –

+0

Я был проверен, что глобально объявленная переменная мы можем делать изменения с этим объектом. лучше проверить его правильно. – NRV

ответ

0

Создание класса, которые держат все глобальные переменные приложения

class GlobalVariables : NSObject { 
     var testString = "initial" 
    } 
    var global = GlobalVariables() 

так что теперь в вашем классе использовать код как

if (error == nil) { 
       selectedPhoto = UIImage(data: imageData)! 
       println("Should change variables") 
// Global variable as now this will work and its value will be not be remove until the application is close , and change until y    
       global.testString = "testing" 
       println("no error in fetching image") 
+0

Зачем для этого нужны глобальные переменные? – Wain

+0

создание глобальной переменной в каждом контроллере, поэтому лучше создать единый глобальный класс, содержащий все переменные, и вы можете использовать переменную в любом контроллере в приложении –

+0

Но это должно быть редкой ситуацией. Это хорошая идея, чтобы напомнить людям о том, как редко глобалы являются правильным решением ... – Wain

Смежные вопросы