iOS DSL 运算符参考文档

借助运算符,您可以根据特定值检查特征属性的值、将它们相互比较,以及组合 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)
}