跳到主要内容

天气

天气数据来自 Apple Weather(WeatherKit),数据每小时更新一次。需要"位置"权限

当前天气

try {
const result = await Weather.getCurrent()
const obj = JSON.parse(result)

this.icon = obj.symbolName // SF Symbol 图标名
this.text = obj.condition // 状况:mostlyCloudy / sunny ...
this.temp = Math.trunc(obj.temperature.value) // 温度
this.feel = Math.trunc(obj.apparentTemperature.value) // 体感温度
this.hum = Math.round(obj.humidity * 100) + "%" // 湿度
} catch (error) {
this.icon = "exclamationmark.triangle.fill"
this.temp = "--"
console.error("天气获取失败,检查定位权限:", error)
}

常用字段

字段说明
symbolNameSF Symbol 图标名,可直接给 icon 组件
condition天气状况字符串
temperature.value温度(°C)
apparentTemperature.value体感温度
humidity湿度,0~1
pressure.value气压(mbar)
pressureTrend气压趋势:rising / falling / steady
wind.speed.value风速(km/h)
wind.compassDirection风向:north / east
visibility.value能见度(m)
uvIndex.value紫外线指数
cloudCover云量,0~1
isDaylight是否白天
precipitationIntensity.value降水强度
dewPoint.value露点温度
完整返回字段(点开看)
{
"temperature": {"value": 23.07, "unit": {"symbol": "°C"}},
"apparentTemperature": {"value": 23.73, "unit": {"symbol": "°C"}},
"dewPoint": {"value": 16.86, "unit": {"symbol": "°C"}},
"humidity": 0.68,
"pressure": {"value": 1010.61, "unit": {"symbol": "mbar"}},
"pressureTrend": "falling",
"visibility": {"value": 22522.81, "unit": {"symbol": "m"}},
"wind": {
"speed": {"value": 22.63, "unit": {"symbol": "km/h"}},
"direction": {"value": 182, "unit": {"symbol": "°"}},
"gust": {"value": 39, "unit": {"symbol": "km/h"}},
"compassDirection": "south"
},
"uvIndex": {"value": 0, "category": "low"},
"cloudCover": 0.84,
"cloudCoverLow": 0.15,
"cloudCoverMid": 0.4,
"cloudCoverHigh": 0.92,
"rainfallAmount": {"pastHour": {...}, "pastSixHours": {...}, "pastTwentyFourHours": {...}},
"snowfallAmount": {"pastHour": {...}, "pastSixHours": {...}, "pastTwentyFourHours": {...}},
"precipitationIntensity": {"value": 0, "unit": {"symbol": "mm/h"}},
"condition": "mostlyCloudy",
"symbolName": "cloud",
"isDaylight": true,
"metadata": {
"latitude": 35.694,
"longitude": 139.767,
"date": 738146429,
"expirationDate": 738146729
}
}

今日天气(含日内预报)

const result = await Weather.getToday()
const obj = JSON.parse(result)

const today = obj.forecast[0]
this.high = Math.trunc(today.highTemperature.value)
this.low = Math.trunc(today.lowTemperature.value)
this.icon = today.symbolName

forecast 是数组,每项是当日预报。包含:

字段说明
highTemperature.value / lowTemperature.value最高 / 最低温度
symbolName / condition图标 / 状况
precipitationChance降水概率,0~1
humidityMax / humidityMin湿度上下限
wind.speed.value风速
uvIndex.value紫外线
sun.sunrise / sun.sunset日出 / 日落毫秒时间戳
moon.phase / moon.moonrise / moon.moonset月相 / 月出 / 月落
daytimeForecast / restOfDayForecast / overnightForecast白天 / 下午 / 夜间分段预报(同上结构)
完整返回字段(点开看)

返回结构非常丰富,主要嵌套层次:

{
metadata,
forecast: [
{
highTemperature, lowTemperature,
highTemperatureTime, lowTemperatureTime,
symbolName, condition, precipitation, precipitationChance,
humidityMin, humidityMax, maximumHumidity, minimumHumidity,
wind: { speed, gust, direction, compassDirection },
windSpeedAvg, windSpeedMax, windGustSpeedMax, highWindSpeed,
visibilityMin, visibilityMax,
maximumVisibility, minimumVisibility,
rainfallAmount, snowfallAmount,
precipitationAmountByType: { rainfall, snowfall, hail, sleet, mixed, precipitation },
uvIndex,
sun: { sunrise, sunset, civilDawn, civilDusk, nauticalDawn, nauticalDusk, astronomicalDawn, astronomicalDusk, solarNoon, solarMidnight },
moon: { phase, moonrise, moonset },
daytimeForecast: {…和上面同一类字段},
restOfDayForecast: {…},
overnightForecast: {…}
},
...
]
}

具体每个字段的单位、类型,运行 console.log(result) 实地查看最直观。

未开放接口

以下接口暂未开放,有需求请联系作者:

  • 天气警报
  • 每小时预报