אופרטורים מאפשרים לבדוק את הערך של מאפייני המאפיינים לעומת ערכים ספציפיים, להשוות ביניהם ולשלב ביטויים שמשמשים בצמתים מסוג condition
.
אפשר להשתמש באופרטורים באמצעות הצהרות import
הבאות:
import GoogleHomeSDK
אופרטורים להשוואה
בין
הפונקציה מקבלת את הערך true
כאשר הערך של ביטוי 1 נמצא בין הערך של ביטוי 2 לבין הערך של ביטוי 3 (כולל). הביטויים מדורגים באופן שונה בהתאם לסוג הנתונים שלהם. סוגי נתונים פשוטים כמו מספרים ומחרוזות מדורגים באותו אופן כמו ב-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)
}
שווה ל-
הפונקציה מקבלת את הערך true
כאשר ביטוי 1 שווה לביטוי 2.
ביטוי 1 | ביטוי 2 | תוצאה |
---|---|---|
6 |
1 |
false |
2 |
2 |
true |
דוגמה ל-DSL
lightOnOffState.onOff.equals(true)
greaterThan
הפונקציה מקבלת את הערך true
כאשר ביטוי 1 גדול מביטוי 2.
ביטוי 1 | ביטוי 2 | תוצאה |
---|---|---|
6 |
1 |
true |
1 |
6 |
false |
דוגמה ל-DSL
// 1555 = 15 degrees C ~ 60 degrees F
temperatureMeasurement.measuredValue.greaterThan(1555)
greaterThanOrEquals
הפונקציה מקבלת את הערך true
כאשר ביטוי 1 גדול מביטוי 2 או שווה לו.
ביטוי 1 | ביטוי 2 | תוצאה |
---|---|---|
8 |
6 |
true |
6 |
6 |
true |
1 |
6 |
false |
דוגמה ל-DSL
starterNode.measuredValue.greaterThanOrEquals(50)
lessThan
הפונקציה מקבלת את הערך true
כשביטוי 1 קטן מביטוי 2.
ביטוי 1 | ביטוי 2 | תוצאה |
---|---|---|
6 |
1 |
false |
1 |
6 |
true |
דוגמה ל-DSL
// 1555 = 15 degrees C ~ 60 degrees F
temperatureMeasurement.measuredValue.lessThan(1555)
lessThanOrEquals
הפונקציה מקבלת את הערך true
כאשר ביטוי 1 קטן מביטוי 2 או שווה לו.
ביטוי 1 | ביטוי 2 | תוצאה |
---|---|---|
8 |
6 |
false |
6 |
6 |
true |
1 |
6 |
true |
דוגמה ל-DSL
starterNode.measuredValue.lessThanOrEquals(50)
notEquals
הפונקציה מקבלת את הערך true
כאשר ביטוי 1 לא שווה לביטוי 2.
ביטוי 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)
}
לא
הפוך של הערך הלוגי של ביטוי.
ביטוי | תוצאה |
---|---|
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)
}