Проблема с функциями NSDictionary в Swift

#objective-c #nsdictionary #swift

#objective-c #nsdictionary #swift

Вопрос:

У меня есть следующее imageMap , которое возвращает NSDictionary внутри Class вызываемого WXCondition :

   (NSDictionary *)imageMap {
    // 1
    static NSDictionary *_imageMap = nil;
    if (! _imageMap) {
        // 2
        _imageMap = @{
          @"01d" : @"weather-clear",
          @"02d" : @"weather-few",
          @"03d" : @"weather-few",
          @"04d" : @"weather-broken",
          @"09d" : @"weather-shower",
          @"10d" : @"weather-rain",
          @"11d" : @"weather-tstorm",
          @"13d" : @"weather-snow",
          @"50d" : @"weather-mist",
          @"01n" : @"weather-moon",
          @"02n" : @"weather-few-night",
          @"03n" : @"weather-few-night",
          @"04n" : @"weather-broken",
          @"09n" : @"weather-shower",
          @"10n" : @"weather-rain-night",
          @"11n" : @"weather-tstorm",
          @"13n" : @"weather-snow",
          @"50n" : @"weather-mist",
      };
    }
    return _imageMap;
}
  

Затем у меня есть следующий метод, который возвращает imageMap метод:

 - (NSString *)imageName {
    return [WXCondition imageMap][self.icon];
}
  

Я пытаюсь преобразовать эти методы в Swift, и пока у меня есть следующее:

 func JSONKeyPathsByPropertyKey() -> NSDictionary {
    return {
        "date": "dt",
        "locationName": "name",
        "humidity": "main.humidity",
        "temperature": "main.temp",
        "tempHigh": "main.temp_max",
        "tempLow": "main.temp_min",
        "sunrise": "sys.sunrise",
        "sunset": "sys.sunset",
        "conditionDescription": "weather.description",
        "condition": "weather.main",
        "icon": "weather.icon",
        "windBearing": "wind.deg",
        "windSpeed": "wind.speed"
    }
}

func imageName() -> NSString {
    return "" //[WXCondition imageMap][self.icon];
}
  

Не совсем уверен, как правильно вернуть an NSDictionary .

Ответ №1:

Метод называется class методом. В Swift вы используете ключевое class слово . Если вам нужно NSDictionary , вы можете создать обычный словарь, а затем просто использовать as ключевое слово (вы также можете связать его с objective c, но это более явно). Итак, это то, что вы получите в итоге:

 class func blah() -> NSDictionary {
    return [
        "date": "dt",
        "locationName": "name"
        // ...
    ] as NSDictionary
}
  

Ваша вторая функция (хотя я не вижу много информации о ней), вероятно, может быть просто изменена на что-то вроде: return WXCondition.imageMap()[self.icon] (возможно, вам потребуется включить as NSString в зависимости от того, откуда поступает информация и что вы пытаетесь с ней сделать)

Ответ №2:

Попробуйте это:

 class A {
    class func myDict() -> NSDictionary {
        var occupations = [
            "Malcolm": "Captain",
            "Kaylee": "Mechanic",
        ]         
        return NSDictionary(dictionary: occupations)
    }
}
println("Test = (A.myDict())")