Лучший способ написать этот переключатель / регистр в машинописи? - PullRequest
1 голос
/ 09 июня 2019

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

enum WeatherCodition {
    Thunderstorm = 0,
    Drizzle,
    Rain,
    Snow,
    Clear,
    Clouds
}

export class Weather {


    getIcon(condition: WeatherCodition): string {

        var iconPath = "";
        switch(condition){
            case WeatherCodition.Thunderstorm:
                iconPath =  "thunderstorm.png";
                break;
            case WeatherCodition.Clouds:
                iconPath =  "clouds.png";
                 break;
            case WeatherCodition.Drizzle:
                iconPath =  "drizzle.png";
                break;
            case WeatherCodition.Rain:
                iconPath =  "rain.png";
                 break;
            case WeatherCodition.Snow:
                iconPath =  "snow.png";
                break;
            default:
                iconPath = "clear.png"
        }

        return iconPath;
    }

}

Ответы [ 4 ]

1 голос
/ 09 июня 2019

Пожалуйста, рассмотрите возможность использования interface KeyValue<K, V> в качестве массива. Мое решение:

export enum WeatherCodition {
    Thunderstorm = 0,
    Drizzle,
    Rain,
    Snow,
    Clear,
    Clouds
}

import { KeyValue } from '@angular/common';

export class Weather {

    public keyValueArray: KeyValue<WeatherCodition, string>[] = 
    [
        { key: WeatherCodition.Thunderstorm, value: "thunderstorm.png" },
        { key: WeatherCodition.Drizzle , value: "drizzle.png"},
        { key: WeatherCodition.Rain, value: "rain.png" },
        { key: WeatherCodition.Snow, value: "snow.png" },
        { key: WeatherCodition.Clear, value: "clear.png" },
        { key: WeatherCodition.Clouds, value: "clouds.png" },
    ];

    getIcon(condition: WeatherCodition): string {
        //check if 'condition' exists in array as key
        return this.keyValueArray[condition] ? 
            this.keyValueArray[condition].value : 
            "clear.png"; 
    }
}

Хорошего дня!

0 голосов
/ 09 июня 2019

Ваш подход в порядке.Вы также можете создать хэш-карту для поиска в постоянном времени, так как вы все равно определяете URL-адреса в своем выражении switch.

   interface WeatherIcons {
     Thunderstorm: string;
     Clouds: string;
   }
   const icons: WeatherIcons = {
      Thunderstorm: "Thunderstorm.jpg",
      Clouds: "Clouds.jpg"
   }
   function getIcon(condition: WeatherCondition) {
      return icons[condition] || "default.jpg";
   }
0 голосов
/ 09 июня 2019

Почему не определен массив?

iconPaths:string[]=["thunderstorm.png","clouds.png","drizzle.png","rain.png","snow.png",
                   "clear.png"]
iconPath=this.iconPaths[condition];
//or 
iconPath=(condition && condition<6)?this.iconPaths[condition]:"";
0 голосов
/ 09 июня 2019

Вы можете создать объект и получить доступ к свойству на основе ключа

let WeatherCodition = {
  thunderstorm:"thunderstorm.png",
  clouds:"clouds.png",
  drizzle:"drizzle.png",
  rain:"rain.png",
  snow:"snow.png",
  default:"clear.png"
}

function getIcon(condition) {
  condition = condition || ""
  condition = Object.keys(WeatherCodition).find(c=> c.toLowerCase() === condition.toLowerCase()) || 'default'
  return WeatherCodition[condition]
}

console.log(getIcon(''))
console.log(getIcon('Clouds'))
console.log(getIcon())
console.log(getIcon('SnoW'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...