原始重複代碼
if (hour1cloud <= 5) hour1weather = @"Clear";
else if (hour1cloud <= 25) hour1weather = @"Mostly Clear";
... // hour2, hour3, hour4 同邏輯重複
封裝為方法
- (NSString *)weatherStringFromCloud:(int)cloud {
if (cloud <= 5) return @"Clear";
else if (cloud <= 25) return @"Mostly Clear";
else if (cloud <= 50) return @"Partly Cloudy";
else if (cloud <= 83) return @"Mostly Cloudy";
else if (cloud <= 105) return @"Overcast";
else return nil;
}
調用
hour1weather = [self weatherStringFromCloud:hour1cloud];
hour2weather = [self weatherStringFromCloud:hour2cloud];
hour3weather = [self weatherStringFromCloud:hour3cloud];
hour4weather = [self weatherStringFromCloud:hour4cloud];
優勢
- **消除重複**,邏輯集中維護。
- 易於單元測試、修改閾值。
- 可進一步擴展:傳入 `NSDictionary` 批量處理、返回結構體包含圖標名等。
Swift 版本
func weatherString(fromCloud cloud: Int) -> String? {
switch cloud {
case ...5: return "Clear"
case 6...25: return "Mostly Clear"
case 26...50: return "Partly Cloudy"
case 51...83: return "Mostly Cloudy"
case 84...105: return "Overcast"
default: return nil
}
}