如何使用 LIKE/CONTAINS 查询领域 swift 中的双精度值
How to use LIKE/CONTAINS query for double value in realm swift
Realm LIKE/CONTAINS 适用于字符串值。如何搜索与 LIKE/CONTAINS
相同的 Double 值
public class ProductModel: Object {
@objc dynamic var id: String? = ""
@objc dynamic var amount: Double = 0.0
}
func searchProductByAmount(searchValue:Double) -> Results<ProductModel> {
let realm = RealmManager.Product
let predicate = NSPredicate(format: "amount CONTAINS %@", searchAmount)
let products = realm.objects(ProductModel.self).filter(predicate)
return products
}
产品型号记录:
- id:"1", amount:10.00
- id:"2", amount:100.00
- id:"3", amount:101.00
- id:"3", amount:200.00
searchProductByAmount(searchValue:10) // 应该 return 10, 100, 101 条记录
只要通过 searchAmount
引用 searchProductByAmount
函数中的 searchValue: Double
参数,printf 语法就需要 %f
符号表示双精度。 %@
用于对象或字符串。
您可以将双精度值存储为字符串并使用 LIKE 和 CONTAINS。
public class ProductModelS: Object {
@objc dynamic var id: String? = ""
@objc dynamic var amount: String = "0.0"
convenience init(id: String?, amount: String) {
self.init()
self.id = id
self.amount = amount
}
}
class ProductModelTests: XCTestCase {
func testDoubleAsString() {
let models = [
ProductModelS(id: UUID().uuidString, amount: String(format: "%.02f", 10.00)),
ProductModelS(id: UUID().uuidString, amount: String(format: "%.02f", 100.00)),
ProductModelS(id: UUID().uuidString, amount: String(format: "%.02f", 101.00)),
ProductModelS(id: UUID().uuidString, amount: String(format: "%.02f", 200.00)),
]
let config = Realm.Configuration(inMemoryIdentifier: UUID().uuidString)
do {
let realm = try Realm(configuration: config)
try realm.write {
realm.add(models)
}
let containsResults = realm.objects(ProductModelS.self)
.filter("amount CONTAINS %@", "\(10)")
let likeResults = realm.objects(ProductModelS.self)
.filter("amount LIKE %@", "*\(10)*")
print("CONTAINS: \(containsResults)")
print("LIKE: \(likeResults)")
} catch {
print("Product model error \(error)")
}
}
}
Realm LIKE/CONTAINS 适用于字符串值。如何搜索与 LIKE/CONTAINS
相同的 Double 值public class ProductModel: Object {
@objc dynamic var id: String? = ""
@objc dynamic var amount: Double = 0.0
}
func searchProductByAmount(searchValue:Double) -> Results<ProductModel> {
let realm = RealmManager.Product
let predicate = NSPredicate(format: "amount CONTAINS %@", searchAmount)
let products = realm.objects(ProductModel.self).filter(predicate)
return products
}
产品型号记录:
- id:"1", amount:10.00
- id:"2", amount:100.00
- id:"3", amount:101.00
- id:"3", amount:200.00
searchProductByAmount(searchValue:10) // 应该 return 10, 100, 101 条记录
只要通过 searchAmount
引用 searchProductByAmount
函数中的 searchValue: Double
参数,printf 语法就需要 %f
符号表示双精度。 %@
用于对象或字符串。
您可以将双精度值存储为字符串并使用 LIKE 和 CONTAINS。
public class ProductModelS: Object {
@objc dynamic var id: String? = ""
@objc dynamic var amount: String = "0.0"
convenience init(id: String?, amount: String) {
self.init()
self.id = id
self.amount = amount
}
}
class ProductModelTests: XCTestCase {
func testDoubleAsString() {
let models = [
ProductModelS(id: UUID().uuidString, amount: String(format: "%.02f", 10.00)),
ProductModelS(id: UUID().uuidString, amount: String(format: "%.02f", 100.00)),
ProductModelS(id: UUID().uuidString, amount: String(format: "%.02f", 101.00)),
ProductModelS(id: UUID().uuidString, amount: String(format: "%.02f", 200.00)),
]
let config = Realm.Configuration(inMemoryIdentifier: UUID().uuidString)
do {
let realm = try Realm(configuration: config)
try realm.write {
realm.add(models)
}
let containsResults = realm.objects(ProductModelS.self)
.filter("amount CONTAINS %@", "\(10)")
let likeResults = realm.objects(ProductModelS.self)
.filter("amount LIKE %@", "*\(10)*")
print("CONTAINS: \(containsResults)")
print("LIKE: \(likeResults)")
} catch {
print("Product model error \(error)")
}
}
}