连接两个字符串 - Swift
join two string - Swift
我有一个适用于我的商店和购物车的应用程序 viewController 我有一个 tableView 单元格,向用户显示他们添加到购物车的内容,我想加入带有名称的商品数量,我试过了此代码可以 100% 工作,但不是像这样显示它 --> item1(3 件)、item2(4 件)、item3(9 件).. 它像 item1、item2、item3 (349) 那样显示
这是我的 tableViewController 代码
import UIKit
class cartTableViewController: UITableViewController {
@IBOutlet var priceLabel: UILabel!
@IBOutlet var totalOrder: UILabel!
@IBOutlet var cartTableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
}
// MARK: - Table view data source
override func viewWillAppear(_ animated: Bool) {
priceLabel.text = "\(userData.selectedItemsPrice())"
totalOrder.text = "\(userData.allItemsToString()) (\(userData.allItemsToAmount())" // this is the line i use it
super.viewWillAppear(animated)
}
}
结构代码:
import UIKit
struct userData {
static var selectedItem: Item? = nil
static var selectedItems: [Item] = []
static func allItemsToAmount() -> String {
var allAmount: [String] = []
for item in selectedItems {
allAmount.append(item.amount)
}
return allAmount.joined(separator: "")
}
static func selectedItemsPrice() -> Double {
var result: Double = 0
for item in selectedItems {
result = result + item.price
}
return result
}
static func storeName() -> String {
var Store: [String] = []
for item in selectedItems {
Store.append(item.Store)
}
return Store.joined()
}
static func allItemsToString() -> String {
var allNames: [String] = []
for item in selectedItems {
allNames.append(item.name)
}
return allNames.joined(separator: "," )
}
}
struct Item: Equatable {
/// All of the animals
static let items : [Item] = {
let bear: Item = .init(image: UIImage(named: "bear"), name: "bear", price: 1, amount: "", Store: "")
return [bear]
}()
var image: UIImage?
var name: String
var price: Double
var amount: String
var Store: String
}
由于您将所有项目和所有价格附加在一起,因此您得到的是您发布的结果。
为了获得您期望的结果,您需要在用户数据中将代码更改为类似这样的内容
static func allItems() -> String {
var allItem: [String] = []
for item in selectedItems {
let text = "\(item.amount) (\(item.amount))"
allItem.append(text)
}
return allItem.joined(separator: ", ")
}
这可以简单地解决为
totalOrder.text = selectedItems.map { "\([=10=].name) (\([=10=].amount) piece)" }.joined(separator: ", ")
我有一个适用于我的商店和购物车的应用程序 viewController 我有一个 tableView 单元格,向用户显示他们添加到购物车的内容,我想加入带有名称的商品数量,我试过了此代码可以 100% 工作,但不是像这样显示它 --> item1(3 件)、item2(4 件)、item3(9 件).. 它像 item1、item2、item3 (349) 那样显示
这是我的 tableViewController 代码
import UIKit
class cartTableViewController: UITableViewController {
@IBOutlet var priceLabel: UILabel!
@IBOutlet var totalOrder: UILabel!
@IBOutlet var cartTableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
}
// MARK: - Table view data source
override func viewWillAppear(_ animated: Bool) {
priceLabel.text = "\(userData.selectedItemsPrice())"
totalOrder.text = "\(userData.allItemsToString()) (\(userData.allItemsToAmount())" // this is the line i use it
super.viewWillAppear(animated)
}
}
结构代码:
import UIKit
struct userData {
static var selectedItem: Item? = nil
static var selectedItems: [Item] = []
static func allItemsToAmount() -> String {
var allAmount: [String] = []
for item in selectedItems {
allAmount.append(item.amount)
}
return allAmount.joined(separator: "")
}
static func selectedItemsPrice() -> Double {
var result: Double = 0
for item in selectedItems {
result = result + item.price
}
return result
}
static func storeName() -> String {
var Store: [String] = []
for item in selectedItems {
Store.append(item.Store)
}
return Store.joined()
}
static func allItemsToString() -> String {
var allNames: [String] = []
for item in selectedItems {
allNames.append(item.name)
}
return allNames.joined(separator: "," )
}
}
struct Item: Equatable {
/// All of the animals
static let items : [Item] = {
let bear: Item = .init(image: UIImage(named: "bear"), name: "bear", price: 1, amount: "", Store: "")
return [bear]
}()
var image: UIImage?
var name: String
var price: Double
var amount: String
var Store: String
}
由于您将所有项目和所有价格附加在一起,因此您得到的是您发布的结果。 为了获得您期望的结果,您需要在用户数据中将代码更改为类似这样的内容
static func allItems() -> String {
var allItem: [String] = []
for item in selectedItems {
let text = "\(item.amount) (\(item.amount))"
allItem.append(text)
}
return allItem.joined(separator: ", ")
}
这可以简单地解决为
totalOrder.text = selectedItems.map { "\([=10=].name) (\([=10=].amount) piece)" }.joined(separator: ", ")