gpt4 book ai didi

swift - (类型)和类型之间的区别

转载 作者:行者123 更新时间:2023-11-28 06:45:47 25 4
gpt4 key购买 nike

目前,我正在编写名为 ControlControllable 的类和协议(protocol)。

Control 必须符合 Controllable

Control 会将其他 Controllable 的数组作为堆栈。每次将 Controllable 添加到堆栈之前,我应该检查堆栈是否包含该元素。如果是,则将该元素移动到堆栈顶部。

好的。VERSION_1:

import Foundation

protocol Controllable: Equatable {
}

func ==<T: Controllable>(lhs: T, rhs: T) -> Bool {
return ObjectIdentifier(lhs).uintValue == ObjectIdentifier(rhs).uintValue
}


class Control: Controllable {
static var mainControl = Control()

private init() {

}

private var stack: [Controllable] = []

func addToStack(controllable: Controllable) {

}
}

出现错误(Xcode 7.3):

return ObjectIdentifier(lhs).uintValue == ObjectIdentifier(rhs).uintValue

Cannot invoke initializer for type 'ObjectIdentifier' with an argument list of type '(T)'

问题 1: 为什么?如何从 lhsrhs 构造 ObjectIdentifier


VERSION_2:

import Foundation

protocol Controllable {
}

class Control: Controllable {
static var mainControl = Control()

private init() {

}

private var stack: [Controllable] = []

func addToStack(controllable: Controllable) {
stack.contains({ element in
return ObjectIdentifier(element).uintValue == ObjectIdentifier(controllable).uintValue
})
}
}

有一个错误(,再次):

return ObjectIdentifier(element).uintValue == ObjectIdentifier(controllable).uintValue

Cannot invoke initializer for type 'ObjectIdentifier' with an argument list of type '((Controllable))'

问题 2: (Controllable) 是元组吗?我应该如何从元组中提取 Controllable


对不起我的英语

最佳答案

ObjectIdentifier 仅适用于作为构造函数中的参数的对象和元类型。

符合 Controllable 的类型不符合 ObjectIdentifier 构造函数中的类型约束。

init(_ x: AnyObject)
init(_ x: Any.Type)

参见 here .

你想给 ObjectIdentifier 一个类型的元类型,比如 String.self。或者你想给 ObjectIdentifier 一个对象,比如“hello”。您可以像这样将对象约束添加到协议(protocol)中:

import Foundation

protocol Controllable: Equatable, AnyObject {
}

func ==<T: Controllable>(lhs: T, rhs: T) -> Bool {
return ObjectIdentifier(lhs).uintValue == ObjectIdentifier(rhs).uintValue
}

关于swift - (类型)和类型之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36472022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com