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)
}

equals

式 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)

論理演算子

2 つの式を論理 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())
}

または

2 つの式を論理 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)
}