将谓词应用于数组中的元素
Applying predicate to an element in array
我收到邮递员的以下回复...
"product_images": [
{
"id": "973",
"image": "http://sellerapp.binaryicdirect.com/public/uploads/products/263_22_1_image",
"is_default": "0"
},
{
"id": "988",
"image": "http://sellerapp.binaryicdirect.com/public/uploads/products/263_22_10_image",
"is_default": "0"
},
{
"id": "989",
"image": "http://sellerapp.binaryicdirect.com/public/uploads/products/263_22_11_image_1507874590",
"is_default": "1"
}
]
现在我想应用一个谓词并仅将 is_default
值为 1 的图像添加到我的数组中。因此在这种情况下,只会添加最后一张图像。那么我怎样才能做到这一点......?希望有人能帮忙...
截至目前,所有图像都已添加到数组中,我正在这样做...
var productImages :[ProductImage] = []
if let images = anItem["product_images"] as? [[String:String]]
{
for image in images {
guard let imageId = image["id"],
let url1 = image["image"],
let isDefaultValue = image["is_default"] else {continue}
print(imageId)
let productImage = ProductImage(id: imageId, url: URL(string: url1)!, isDefault: (Int(isDefaultValue) ?? 0) != 0)
productImages.append(productImage)
}}
let theProduct = Product(name: name, id: id, theRate: rate, quantity: qty, sku: skuCode, prdCateg: prodCat, prodDescr: description, images: productImages, mrp: mrp)
self.productData1.append(theProduct)
解决方案 1
一行代码即可实现
在swift 3中可以使用filter代替predicate
let productsWithDefaultImage = productImages.filter{[=11=].isDefault == 1}
解决方案 2
按照 Ahmed 的建议,只需复制并粘贴即可
var productImages :[ProductImage] = []
if let images = anItem["product_images"] as? [[String:String]]
{
for image in images {
guard let imageId = image["id"],
let url1 = image["image"],
let isDefaultValue = image["is_default"],
isDefaultValue == "1" else {continue}
print(imageId)
let productImage = ProductImage(id: imageId, url: URL(string: url1)!, isDefault: (Int(isDefaultValue) ?? 0) != 0)
productImages.append(productImage)
}}
let theProduct = Product(name: name, id: id, theRate: rate, quantity: qty, sku: skuCode, prdCateg: prodCat, prodDescr: description, images: productImages, mrp: mrp)
self.productData1.append(theProduct)
您可以在附加到 productImages
数组之前简单地 productImage.isDefault
值:
if let images = anItem["product_images"] as? [[String:String]]
{
for image in images {
guard let imageId = image["id"],
let url1 = image["image"],
let isDefaultValue = image["is_default"] else {continue}
print(imageId)
let productImage = ProductImage(id: imageId, url: URL(string: url1)!, isDefault: (Int(isDefaultValue) ?? 0) != 0)
// just add a simple check here:
if productImage.isDefault == 1 {
productImages.append(productImage)
}
}
}
这是一个工作 playground,展示了您可以做什么
import UIKit
import PlaygroundSupport
let productImages: [[String:String]] = [
[
"id": "973",
"image": "http://sellerapp.binaryicdirect.com/public/uploads/products/263_22_1_image",
"is_default": "0"
],
[
"id": "988",
"image": "http://sellerapp.binaryicdirect.com/public/uploads/products/263_22_10_image",
"is_default": "0"
],
[
"id": "989",
"image": "http://sellerapp.binaryicdirect.com/public/uploads/products/263_22_11_image_1507874590",
"is_default": "1"
]
]
let productsWithDefaultImage = productImages.filter {
if let is_default: String = [=10=]["is_default"] {
if is_default == "1" {
return true
}
}
return false
}
假设总是只有一个 default
图像使用first
函数
var productImages = [ProductImage]()
if let images = anItem["product_images"] as? [[String:String]]
{
if let defaultImage = images.first(where: {[=10=]["is_default"] == "1"}) {
let productImage = ProductImage(id: defaultImage["id"]!,
url: URL(string: defaultImage["image"]!)!,
isDefault: true)
productImages.append(productImage)
}
...
编辑
这是要在 Playground 中测试的单机版本
struct ProductImage {
let id : String
let url : URL
let isDefault : Bool
}
let images = [
["id": "973", "image": "http://sellerapp.binaryicdirect.com/public/uploads/products/263_22_1_image", "is_default": "0"],
["id": "988", "image": "http://sellerapp.binaryicdirect.com/public/uploads/products/263_22_10_image", "is_default": "0"],
["id": "989", "image": "http://sellerapp.binaryicdirect.com/public/uploads/products/263_22_11_image_1507874590", "is_default": "1"]
]
var productImages = [ProductImage]()
if let defaultImage = images.first(where: {[=11=]["is_default"] == "1"}) {
let productImage = ProductImage(id: defaultImage["id"]!,
url: URL(string: defaultImage["image"]!)!,
isDefault: true)
productImages.append(productImage)
}
print(productImages)
我收到邮递员的以下回复...
"product_images": [
{
"id": "973",
"image": "http://sellerapp.binaryicdirect.com/public/uploads/products/263_22_1_image",
"is_default": "0"
},
{
"id": "988",
"image": "http://sellerapp.binaryicdirect.com/public/uploads/products/263_22_10_image",
"is_default": "0"
},
{
"id": "989",
"image": "http://sellerapp.binaryicdirect.com/public/uploads/products/263_22_11_image_1507874590",
"is_default": "1"
}
]
现在我想应用一个谓词并仅将 is_default
值为 1 的图像添加到我的数组中。因此在这种情况下,只会添加最后一张图像。那么我怎样才能做到这一点......?希望有人能帮忙...
截至目前,所有图像都已添加到数组中,我正在这样做...
var productImages :[ProductImage] = []
if let images = anItem["product_images"] as? [[String:String]]
{
for image in images {
guard let imageId = image["id"],
let url1 = image["image"],
let isDefaultValue = image["is_default"] else {continue}
print(imageId)
let productImage = ProductImage(id: imageId, url: URL(string: url1)!, isDefault: (Int(isDefaultValue) ?? 0) != 0)
productImages.append(productImage)
}}
let theProduct = Product(name: name, id: id, theRate: rate, quantity: qty, sku: skuCode, prdCateg: prodCat, prodDescr: description, images: productImages, mrp: mrp)
self.productData1.append(theProduct)
解决方案 1
一行代码即可实现
在swift 3中可以使用filter代替predicate
let productsWithDefaultImage = productImages.filter{[=11=].isDefault == 1}
解决方案 2
按照 Ahmed 的建议,只需复制并粘贴即可
var productImages :[ProductImage] = []
if let images = anItem["product_images"] as? [[String:String]]
{
for image in images {
guard let imageId = image["id"],
let url1 = image["image"],
let isDefaultValue = image["is_default"],
isDefaultValue == "1" else {continue}
print(imageId)
let productImage = ProductImage(id: imageId, url: URL(string: url1)!, isDefault: (Int(isDefaultValue) ?? 0) != 0)
productImages.append(productImage)
}}
let theProduct = Product(name: name, id: id, theRate: rate, quantity: qty, sku: skuCode, prdCateg: prodCat, prodDescr: description, images: productImages, mrp: mrp)
self.productData1.append(theProduct)
您可以在附加到 productImages
数组之前简单地 productImage.isDefault
值:
if let images = anItem["product_images"] as? [[String:String]]
{
for image in images {
guard let imageId = image["id"],
let url1 = image["image"],
let isDefaultValue = image["is_default"] else {continue}
print(imageId)
let productImage = ProductImage(id: imageId, url: URL(string: url1)!, isDefault: (Int(isDefaultValue) ?? 0) != 0)
// just add a simple check here:
if productImage.isDefault == 1 {
productImages.append(productImage)
}
}
}
这是一个工作 playground,展示了您可以做什么
import UIKit
import PlaygroundSupport
let productImages: [[String:String]] = [
[
"id": "973",
"image": "http://sellerapp.binaryicdirect.com/public/uploads/products/263_22_1_image",
"is_default": "0"
],
[
"id": "988",
"image": "http://sellerapp.binaryicdirect.com/public/uploads/products/263_22_10_image",
"is_default": "0"
],
[
"id": "989",
"image": "http://sellerapp.binaryicdirect.com/public/uploads/products/263_22_11_image_1507874590",
"is_default": "1"
]
]
let productsWithDefaultImage = productImages.filter {
if let is_default: String = [=10=]["is_default"] {
if is_default == "1" {
return true
}
}
return false
}
假设总是只有一个 default
图像使用first
函数
var productImages = [ProductImage]()
if let images = anItem["product_images"] as? [[String:String]]
{
if let defaultImage = images.first(where: {[=10=]["is_default"] == "1"}) {
let productImage = ProductImage(id: defaultImage["id"]!,
url: URL(string: defaultImage["image"]!)!,
isDefault: true)
productImages.append(productImage)
}
...
编辑
这是要在 Playground 中测试的单机版本
struct ProductImage {
let id : String
let url : URL
let isDefault : Bool
}
let images = [
["id": "973", "image": "http://sellerapp.binaryicdirect.com/public/uploads/products/263_22_1_image", "is_default": "0"],
["id": "988", "image": "http://sellerapp.binaryicdirect.com/public/uploads/products/263_22_10_image", "is_default": "0"],
["id": "989", "image": "http://sellerapp.binaryicdirect.com/public/uploads/products/263_22_11_image_1507874590", "is_default": "1"]
]
var productImages = [ProductImage]()
if let defaultImage = images.first(where: {[=11=]["is_default"] == "1"}) {
let productImage = ProductImage(id: defaultImage["id"]!,
url: URL(string: defaultImage["image"]!)!,
isDefault: true)
productImages.append(productImage)
}
print(productImages)