運算子可讓您根據特定值檢查特徵屬性的值、相互比較,以及合併 condition
節點中使用的運算式。
運算子可透過下列 import
陳述式提供:
import GoogleHomeSDK
比較運算子
介於
當「運算式 1」的值介於「運算式 2」和「運算式 3」之間 (含首尾) 時,會評估為 true
。運算式的排名方式會因資料類型而異。數字和字串等簡單資料型別的排序方式與 Swift 相同。
運算式 1 | 運算式 2 | 運算式 3 | 結果 |
---|---|---|---|
6 |
1 |
3 |
false |
2 |
1 |
3 |
true |
DSL 範例
let time = stateReader(structure, Google.TimeTrait)
condition {
time.currentTime
.between(
time.sunsetTime,
time.sunriseTime)
}
等於
如果「運算式 1」等於「運算式 2」,則評估結果為 true
。
運算式 1 | 運算式 2 | 結果 |
---|---|---|
6 |
1 |
false |
2 |
2 |
true |
DSL 範例
lightOnOffState.onOff.equals(true)
greaterThan
如果運算式 1 大於運算式 2,則求值結果為 true
。
運算式 1 | 運算式 2 | 結果 |
---|---|---|
6 |
1 |
true |
1 |
6 |
false |
DSL 範例
// 1555 = 15 degrees C ~ 60 degrees F
temperatureMeasurement.measuredValue.greaterThan(1555)
greaterThanOrEquals
如果運算式 1 大於或等於運算式 2,則評估結果為 true
。
運算式 1 | 運算式 2 | 結果 |
---|---|---|
8 |
6 |
true |
6 |
6 |
true |
1 |
6 |
false |
DSL 範例
starterNode.measuredValue.greaterThanOrEquals(50)
lessThan
當「運算式 1」小於「運算式 2」時,會評估為 true
。
運算式 1 | 運算式 2 | 結果 |
---|---|---|
6 |
1 |
false |
1 |
6 |
true |
DSL 範例
// 1555 = 15 degrees C ~ 60 degrees F
temperatureMeasurement.measuredValue.lessThan(1555)
lessThanOrEquals
當運算式 1 小於或等於運算式 2 時,計算結果為 true
。
運算式 1 | 運算式 2 | 結果 |
---|---|---|
8 |
6 |
false |
6 |
6 |
true |
1 |
6 |
true |
DSL 範例
starterNode.measuredValue.lessThanOrEquals(50)
notEquals
如果運算式 1 不等於運算式 2,則評估結果為 true
。
運算式 1 | 運算式 2 | 結果 |
---|---|---|
6 |
1 |
true |
1 |
6 |
true |
2 |
2 |
false |
DSL 範例
occupancySensorStarter.occupancy.notEquals(.occupied)
算術運算子
Swift 不支援使用中置運算子 (例如 +、-、* 或 /) 建構自動化運算式。請改用 SDK 提供的運算子,例如 Plus
或 Minus
。
新增
加法運算子 .plus( )
。
DSL 範例
var totalCount = 0
...
totalCount = totalCount.plus(1)
減號
減法運算子 .minus( )
。
DSL 範例
var countdown = 10
...
countdown = countdown.minus(1)
相乘
乘法運算子 .multiply( )
。
DSL 範例
val millis = seconds.multiply(1000)
除號
除法運算子 .divide( )
。
DSL 範例
val rpm = revolutions.divide(minutes)
邏輯運算子
和
在邏輯 AND 運算式中合併兩個運算式,當兩個運算式都是 true
時,評估結果為 true
。
運算式 1 | 運算式 2 | 結果 |
---|---|---|
false |
false |
false |
true |
false |
false |
false |
true |
false |
true |
true |
true |
DSL 範例
condition {
let exp1 = armState.armState
let exp2 = doorLockState.lockState
exp1.and(exp2)
}
not
反轉運算式的邏輯值。
運算式 | 結果 |
---|---|
true |
false |
false |
true |
DSL 範例
condition {
let exp1 = armState.armState
let exp2 = doorLockState.lockState
exp1.and(exp2.not())
}
或
將兩個運算式合併為邏輯 OR 運算式。
運算式 1 | 運算式 2 | 結果 |
---|---|---|
false |
false |
false |
true |
false |
true |
false |
true |
true |
DSL 範例
condition {
let exp1 = doorLockState.lockState.equals(.unlocked)
let exp2 = contactSensorState.stateValue.equals(false)
exp1.or(exp2)
}