מידע על מפעילי DSL ב-iOS

אופרטורים מאפשרים לבדוק את הערך של מאפייני המאפיינים לעומת ערכים ספציפיים, להשוות ביניהם ולשלב ביטויים שמשמשים בצמתים מסוג 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)
}