Member 12921842 Ответов: 1

Как получить доступ к переменной в swift вне данной функции


По сути, я пытаюсь получить доступ к своей переменной " ar1 " в определенной точке моего кода, но не могу. Я тоже пытаюсь вернуть это значение, но в этот момент оно возвращает NULL.

Что здесь не так ?

Я попробовал, как ниже код :

Что я уже пробовал:

import Foundation
import UIKit

class Web {
    var ar1 = [Double]()
    var ar2 = [Double]()

    func getData(str: String) -> [Double] {
    let request = NSMutableURLRequest(url: URL(string: str)!)
      httpGet(request as URLRequest!){
            (data, error) -> Void in
            if error != nil {
                print(error ?? "Error")
            } else {
                let delimiter = "\t"
                let lines:[String] = data.components(separatedBy:     CharacterSet.newlines) as [String]

                for line in lines {           
                    var values:[String] = []
                    if line != "" {
                        values = line.components(separatedBy: delimiter)
                         let str1 = (values[0])//FIRST COLUMN
                        let str2 = (values[1])//SECOND COLUMN
                       let db1 = NumberFormatter().number(from: str1)?.doubleValue
                        self.ar1.append(db1!)
                        let db2 = NumberFormatter().number(from: str2)?.doubleValue
                        self.ar2.append(db2!)
                    }
                }
            dump (self.ar1) // "ar1" accessible HERE (returns all elements)
        }
    }//end of request
        //BUT I WANT TO RETURN "ar1" HERE !
       // So that I can use it in my MAIN class
        dump (self.ar1) // "ar1" not accessible here (returns ZERO elements)
        return self.ar1
    }
        func httpGet(_ request: URLRequest!, callback: @escaping (String, String?) -> Void) {
            let session = URLSession.shared
            let task = session.dataTask(with: request, completionHandler: {
                (data, response, error) -> Void in
                if error != nil {
                callback("", error!.localizedDescription)
                } else {
                let result = NSString(data: data!, encoding:
                    String.Encoding.ascii.rawValue)!
                callback(result as String, nil)
                }
            })
            task.resume()
}
    }

1 Ответов

Рейтинг:
2

Dennis E White

не знаете, что вы ожидаете увидеть внутри ar1? с моей точки зрения, в нем вообще ничего не должно быть.

Я бы порекомендовал вам прочитать еще несколько блоков и закрытие.

просто обратите внимание, что блок кода, который вы запускаете, будет выполняться отдельно от потока, в котором вы пытаетесь вернуть ar1, но ничего в нем не видите.

если вы хотите, чтобы какой-то другой объект имел доступ к результатам после запуска вашего блока кода, то вам, вероятно, следует подумать об использовании уведомления или, возможно, протокола с обратным вызовом.

Надеюсь, это поможет.