Tài liệu tham khảo về toán tử DSL của iOS

Toán tử cho phép bạn kiểm tra giá trị của các thuộc tính đặc điểm so với các giá trị cụ thể, so sánh các giá trị đó với nhau và kết hợp các biểu thức được dùng trong nút condition.

Toán tử được cung cấp thông qua các câu lệnh import sau:

import GoogleHomeSDK

Toán tử so sánh

nằm trong khoảng

Trả về true khi giá trị của Biểu thức 1 nằm trong khoảng từ giá trị của Biểu thức 2 đến giá trị của Biểu thức 3 (bao gồm cả hai giá trị này). Biểu thức được xếp hạng theo cách khác nhau tuỳ thuộc vào kiểu dữ liệu của biểu thức. Các kiểu dữ liệu đơn giản như số và chuỗi được xếp hạng theo cách tương tự như trong Swift.

Ví dụ
Biểu thức 1 Biểu thức 2 Biểu thức 3 Kết quả
6 1 3 false
2 1 3 true

Ví dụ về DSL

let time = stateReader(structure, Google.TimeTrait)
condition {
  time.currentTime
     .between(
      time.sunsetTime,
      time.sunriseTime)
}

dấu bằng

Trả về true khi Biểu thức 1 bằng Biểu thức 2.

Ví dụ
Biểu thức 1 Biểu thức 2 Kết quả
6 1 false
2 2 true

Ví dụ về DSL

lightOnOffState.onOff.equals(true)

greaterThan

Trả về true khi Biểu thức 1 lớn hơn Biểu thức 2.

Ví dụ
Biểu thức 1 Biểu thức 2 Kết quả
6 1 true
1 6 false

Ví dụ về DSL

// 1555 = 15 degrees C ~ 60 degrees F
temperatureMeasurement.measuredValue.greaterThan(1555)

greaterThanOrEquals

Trả về true khi Biểu thức 1 lớn hơn hoặc bằng Biểu thức 2.

Ví dụ
Biểu thức 1 Biểu thức 2 Kết quả
8 6 true
6 6 true
1 6 false

Ví dụ về DSL

starterNode.measuredValue.greaterThanOrEquals(50)

lessThan

cho kết quả là true khi Biểu thức 1 nhỏ hơn Biểu thức 2.

Ví dụ
Biểu thức 1 Biểu thức 2 Kết quả
6 1 false
1 6 true

Ví dụ về DSL

// 1555 = 15 degrees C ~ 60 degrees F
temperatureMeasurement.measuredValue.lessThan(1555)

lessThanOrEquals

Trả về true khi Biểu thức 1 nhỏ hơn hoặc bằng Biểu thức 2.

Ví dụ
Biểu thức 1 Biểu thức 2 Kết quả
8 6 false
6 6 true
1 6 true

Ví dụ về DSL

starterNode.measuredValue.lessThanOrEquals(50)

notEquals

Trả về true khi Biểu thức 1 không bằng Biểu thức 2.

Ví dụ
Biểu thức 1 Biểu thức 2 Kết quả
6 1 true
1 6 true
2 2 false

Ví dụ về DSL

occupancySensorStarter.occupancy.notEquals(.occupied)

Toán tử số học

Các toán tử trung tố như +, -, * hoặc / không được hỗ trợ để tạo biểu thức tự động hoá trong Swift. Thay vào đó, hãy sử dụng các toán tử do SDK cung cấp, chẳng hạn như Plus hoặc Minus.

Thêm

Toán tử cộng .plus( ).

Ví dụ về DSL

var totalCount = 0
...
totalCount = totalCount.plus(1)

Trừ

Toán tử trừ .minus( ).

Ví dụ về DSL

var countdown = 10
...
countdown = countdown.minus(1)

Nhân

Toán tử nhân .multiply( ).

Ví dụ về DSL

val millis = seconds.multiply(1000)

Chia

Toán tử chia .divide( ).

Ví dụ về DSL

val rpm = revolutions.divide(minutes)

Toán tử logic

và

Kết hợp hai biểu thức trong một biểu thức AND logic, đánh giá thành true khi cả hai biểu thức đều là true.

Ví dụ
Biểu thức 1 Biểu thức 2 Kết quả
false false false
true false false
false true false
true true true

Ví dụ về DSL

condition {
  let exp1 = armState.armState
  let exp2 = doorLockState.lockState
  exp1.and(exp2)
}

không

Phủ định giá trị logic của một biểu thức.

Ví dụ
Biểu thức Kết quả
true false
false true

Ví dụ về DSL

condition {
  let exp1 = armState.armState
  let exp2 = doorLockState.lockState
  exp1.and(exp2.not())
}

hoặc

Kết hợp hai biểu thức thành một biểu thức logic OR.

Ví dụ
Biểu thức 1 Biểu thức 2 Kết quả
false false false
true false true
false true true

Ví dụ về DSL

condition {
  let exp1 = doorLockState.lockState.equals(.unlocked)
  let exp2 = contactSensorState.stateValue.equals(false)
  exp1.or(exp2)
}