Есть ли способ передать данные одного свойства интерфейса как & ldquo; this & rdquo; в другую собственность?

Другой пример:

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)
                }
            }
1
задан some_other_guy 16 January 2019 в 15:30
поделиться

1 ответ

Вы довольно близки к своему типу, проблема в том, что машинопись не будет делать никакого вывода о переменных. Если вы установите тип в аннотации типа переменной, то это будет последний тип.

Для получения необходимого поведения вы должны использовать функцию. Функции могут иметь дополнительные параметры типа, которые компилятор выведет на основе фактического типа параметра:

interface IExample<Model extends Record<string, any>> {
  model: () => Model,
  evaluator: Record<string, (this: Model) => boolean>
}

function createExample<T>(o: IExample<T>) {
  return o;
}

const example = createExample({
  model: () => ({
    k1: true,
    k2: 'some content',
    k3: [1, 2, 3]
  }),
  evaluator: {
    testEvaluator: function () {
      // this is  { k1: boolean; k2: string; k3: number[]; }

      return this.k1 === true
    }
  }
});
0
ответ дан Titian Cernicova-Dragomir 16 January 2019 в 15:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: