iOS DSL 运算符参考文档

借助运算符,您可以将 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 提供的运算符,例如 PlusMinus

添加

加法运算符 .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)
}