我想比较两个数组的元素,并检查它们是否相等.我已经尝试了各种解决方案但没有真正有效.
我试过如何比较两个对象数组的解决方案 ?
这是我的目标:
struct AccountBalance: Decodable {
let balance: Double
let currency: String
init(balance: Double, currency: String ) {
self.currency = currency
self.balance = balance
}
enum CodingKeys: String, CodingKey {
case currency = "Currency"
case balance = "Balance"
}
}
Run Code Online (Sandbox Code Playgroud)
这是我试过的链接中的代码:
let result = zip(accountBalance, getsSaved).enumerate().filter() {
$1.0 == $1.1
}.map{$0.0}
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
Closure tuple parameter '(offset: Int, element: (AccountBalance, AccountBalance))' does not support destructuring with implicit parameters
Run Code Online (Sandbox Code Playgroud) 我制作了一个协议 Stringify 来将实现该协议的类型转换为字符串。
protocol Stringify {
func stringify() -> String
}
extension Collection where Iterator.Element == Stringify {
/// changes all the elements in the collection to a String
func stringify() -> [String] {
var strings = [String]()
if let elements = self as? [Stringify] {
for element in elements {
strings.append(element.stringify())
}
}
return strings
}
}
extension Int: Stringify {
func stringify() -> String {
return String(self)
}
}
extension Double: Stringify {
func stringify() -> String { …
Run Code Online (Sandbox Code Playgroud) 将类的属性初始化为:
1.
let menuBar:MenuBar = {
let mb = MenuBar()
return mb
}()
Run Code Online (Sandbox Code Playgroud)
和:
2.
let menuBar = MenuBar()
Run Code Online (Sandbox Code Playgroud) 我有一个对象数组,我想通过两个条件过滤它们,如果对象在某个组中,或者它有某个名称,但我不知道为什么它不起作用。
这是我的代码:
let outputfiler = array.filter({$0.group.contains (where: {$0 == "groupBig" }) } || $1.name.contains(where: {$1 == "Eis"}) )
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
闭包中不包含匿名闭包参数
编辑:组是一个字符串数组,名称只是一个字符串。
我也试过这个:
outputfiler = array.filter{$0.group.contains (where: {$0 == "groupBig" }) || $0.name(where: {$0 == "Eis"}) }
Run Code Online (Sandbox Code Playgroud)
但是后来我收到了这个错误:
Extraneous argument label 'where:' in call
Run Code Online (Sandbox Code Playgroud) 我想为UILabel创建一个扩展,我想修改UILabel类以自动检查文本值是否为positiv/negativ/cero,然后自动设置Color.
我想在我的代码中初始化UILabel时激活它,如下所示:
lazy var labelValue: UILabel! = {
let lb = UILabel()
lb.activateUpDown = true
return lb
}()
Run Code Online (Sandbox Code Playgroud)
这是我创建的扩展:
extension UILabel {
var activateUpDown: Bool {
set {
if activateUpDown == true {
textColor = colorUpDown(value: text)
}
}
get {
return true
}
}
func colorUpDown(value: String?) -> UIColor {
let valueDouble = Double(value ?? "0") ?? 0
var output:UIColor = .black
if valueDouble < 0 {
output = .red
} else {
if valueDouble > 0 {
output …
Run Code Online (Sandbox Code Playgroud) 这就是我正在做的:
-> 使用 FirebaseAuthentification 登录/注册 Firebase
-> 监听 AuthStateDidChangeListenerHandle
-> 我在 Firestore 中存储额外的用户信息,因此我检查 Firestore 中是否存在该用户
-> 如果用户不存在,我创建一个空用户
-> 如果一切成功,我通过回调返回未来发布者(我也想更改它)
这是 checkLoginState 函数:
func checkLoginState(completion: @escaping (AnyPublisher<AccountDetails,Error>) -> Void) {
self.handler = Auth.auth().addStateDidChangeListener { [weak self] auth, user in
guard let safeSelf = self else { return }
completion(Future<AccountDetails,Error> { promise in
if let user = user {
print(user)
print(auth)
safeSelf.checkIfUserIsInDatabase(user: user.uid) { result in
switch result {
case .success(let isAvailable):
if isAvailable {
promise(.success(AccountDetails(userUID: user.uid,name: user.displayName, loggedIn: true, premiumUser: false))) …
Run Code Online (Sandbox Code Playgroud)