Operatory umożliwiają sprawdzanie wartości atrybutów cech pod kątem określonych wartości, porównywanie ich ze sobą i łączenie wyrażeń używanych w węzłach condition.
Operatory są udostępniane za pomocą tych instrukcji import:
import GoogleHomeSDK
Operatory porównania
pomiędzy
Zwraca wartość true, gdy wartość wyrażenia 1 mieści się w zakresie wartości wyrażenia 2 i wyrażenia 3 (włącznie). Wyrażenia są klasyfikowane w różny sposób w zależności od typu danych. Proste typy danych, takie jak liczby i ciągi znaków, są klasyfikowane w taki sam sposób jak w Swift.
| Wyrażenie 1 | Wyrażenie 2 | Wyrażenie 3 | Wynik |
|---|---|---|---|
6 |
1 |
3 |
false |
2 |
1 |
3 |
true |
Przykład DSL
let time = stateReader(structure, Google.TimeTrait)
condition {
time.currentTime
.between(
time.sunsetTime,
time.sunriseTime)
}
równa się
Zwraca wartość true, gdy Wyrażenie 1 jest równe Wyrażeniu 2.
| Wyrażenie 1 | Wyrażenie 2 | Wynik |
|---|---|---|
6 |
1 |
false |
2 |
2 |
true |
Przykład DSL
lightOnOffState.onOff.equals(true)
greaterThan
Zwraca wartość true, gdy Wyrażenie 1 jest większe niż Wyrażenie 2.
| Wyrażenie 1 | Wyrażenie 2 | Wynik |
|---|---|---|
6 |
1 |
true |
1 |
6 |
false |
Przykład DSL
// 1555 = 15 degrees C ~ 60 degrees F
temperatureMeasurement.measuredValue.greaterThan(1555)
greaterThanOrEquals
Zwraca wartość true, gdy Wyrażenie 1 jest większe lub równe Wyrażeniu 2.
| Wyrażenie 1 | Wyrażenie 2 | Wynik |
|---|---|---|
8 |
6 |
true |
6 |
6 |
true |
1 |
6 |
false |
Przykład DSL
starterNode.measuredValue.greaterThanOrEquals(50)
lessThan
zwraca wartość true, gdy Wyrażenie 1 jest mniejsze niż Wyrażenie 2.
| Wyrażenie 1 | Wyrażenie 2 | Wynik |
|---|---|---|
6 |
1 |
false |
1 |
6 |
true |
Przykład DSL
// 1555 = 15 degrees C ~ 60 degrees F
temperatureMeasurement.measuredValue.lessThan(1555)
lessThanOrEquals
Zwraca wartość true, gdy Wyrażenie 1 jest mniejsze lub równe Wyrażeniu 2.
| Wyrażenie 1 | Wyrażenie 2 | Wynik |
|---|---|---|
8 |
6 |
false |
6 |
6 |
true |
1 |
6 |
true |
Przykład DSL
starterNode.measuredValue.lessThanOrEquals(50)
notEquals
Zwraca wartość true, gdy Wyrażenie 1 nie jest równe Wyrażeniu 2.
| Wyrażenie 1 | Wyrażenie 2 | Wynik |
|---|---|---|
6 |
1 |
true |
1 |
6 |
true |
2 |
2 |
false |
Przykład DSL
occupancySensorStarter.occupancy.notEquals(.occupied)
Operatory arytmetyczne
Operatory infiksowe, takie jak +, -, * lub /, nie są obsługiwane w przypadku tworzenia wyrażeń automatyzacji w Swift. Zamiast tego używaj operatorów udostępnianych przez pakiet SDK, np. Plus lub Minus.
Dodaj
Operator dodawania .plus( ).
Przykład DSL
var totalCount = 0
...
totalCount = totalCount.plus(1)
Odejmowanie
Operator odejmowania .minus( ).
Przykład DSL
var countdown = 10
...
countdown = countdown.minus(1)
Mnożenie
Operator mnożenia .multiply( ).
Przykład DSL
val millis = seconds.multiply(1000)
Dzielenie
Operator dzielenia .divide( ).
Przykład DSL
val rpm = revolutions.divide(minutes)
Operatory logiczne
i
Łączy 2 wyrażenia w wyrażenie logiczne AND, które przyjmuje wartość true, gdy oba wyrażenia mają wartość true.
| Wyrażenie 1 | Wyrażenie 2 | Wynik |
|---|---|---|
false |
false |
false |
true |
false |
false |
false |
true |
false |
true |
true |
true |
Przykład DSL
condition {
let exp1 = armState.armState
let exp2 = doorLockState.lockState
exp1.and(exp2)
}
nie
Neguje wartość logiczną wyrażenia.
| Wyrażenie | Wynik |
|---|---|
true |
false |
false |
true |
Przykład DSL
condition {
let exp1 = armState.armState
let exp2 = doorLockState.lockState
exp1.and(exp2.not())
}
lub
Łączy 2 wyrażenia w wyrażenie logiczne OR.
| Wyrażenie 1 | Wyrażenie 2 | Wynik |
|---|---|---|
false |
false |
false |
true |
false |
true |
false |
true |
true |
Przykład DSL
condition {
let exp1 = doorLockState.lockState.equals(.unlocked)
let exp2 = contactSensorState.stateValue.equals(false)
exp1.or(exp2)
}