Другой пример:
class func getExchangeRate(#baseCurrency: String, foreignCurrency:String, completion: ((result:Double?) -> Void)!){
let baseURL = kAPIEndPoint
let query = String(baseCurrency)+"_"+String(foreignCurrency)
var finalExchangeRate = 0.0
if let url = NSURL(string: baseURL + query) {
NSURLSession.sharedSession().dataTaskWithURL(url) { data, response, error in
if ((data) != nil) {
let jsonDictionary:NSDictionary = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: nil) as NSDictionary
if let results = jsonDictionary["results"] as? NSDictionary{
if let queryResults = results[query] as? NSDictionary{
if let exchangeRate = queryResults["val"] as? Double{
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
dispatch_async(dispatch_get_main_queue()) {
completion(result: exchangeRate)
}
}
}
}
}
}
else {
completion(result: nil)
}
}.resume()
}
}
Вызов:
Currency.getExchangeRate(baseCurrency: "USD", foreignCurrency: "EUR") { (result) -> Void in
if let exchangeValue = result {
print(exchangeValue)
}
}
Я вообще не советую использовать script
в файлах инициализации оболочки (и наш родственный сайт Unix & Linux Stack Exchange лучше подходит для более широкого вопроса о том, что вместо этого использовать), но способ избежать вашей узкой проблемы состоит в том, чтобы использовать переменную окружения в качестве сигилы, что регистрация уже ведется, и избегать начала нового сеанса, если он установлен:
if ! [ -n "$script_log" ]; then
script_log=$(date +"%m_%d_%Y_%H_%M_%S_%p.tlog")
export script_log
script "$script_log"
fi