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 提供的運算子,例如 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)
}