借助运算符,您可以将 trait 属性的值与特定值进行对比,将它们相互比较,以及组合 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)
}
非
对表达式的逻辑值执行求反运算。
表达式 | 结果 |
---|---|
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)
}