我有这段代码不能编译。这个想法是我想要保持一个全局不变的类。
ViewController.swift:
var user = [String: String]()
user[CUser.Attribute.TYPE] = userTypeSwitch.on ? CUser.Type.RIDER.rawValue : CUser.Type.RIDER.rawValue
CUser.swift
class CUser {
enum Type: String {
case RIDER
case DRIVER
}
class Attribute {
sta
如果没有正确表达式上的类型,类型会做什么?
在这个例子中,在BooleanLiteralType之外已经存在另一个类型时,在BooleanLiteralConvertible中创建一个类型的目的是什么?他们是亲戚吗?
/// Conforming types can be initialized with the Boolean literals
/// `true` and `false`.
protocol BooleanLiteralConvertible {
typealias BooleanLiteralType
/// Cr
假设此代码:
protocol Test: AnyObject {}
class RealTest: Test {}
class Wrapper<A: AnyObject> {
weak var value: A?
init(_ value: A) {
self.value = value
}
}
let realTest = RealTest()
let wrapper = Wrapper(realTest)
上面的代码起作用,并创建了包装器。但是,当我将realTest更改为:
let realTest: Test = RealT
(如果有人能推荐一个更好的头衔,请这样做)
以下代码不使用错误Type 'ObserverClass' does not conform to protocol 'Observer'进行编译,编译器建议通过声明var object: ObservedObject进行修复。
class ObservedObject {}
class ObservedObjectSubclass: ObservedObject {}
protocol Observer {
var object: ObservedObject { get }
}
class Observ
我遇到了一个方法上的问题,我无法解释。下面是一些测试代码,它显示了问题所在:
protocol Base {}
protocol Extended: Base {}
struct Instance:Extended {}
let anInstance = Instance()
let instanceOfBase = anInstance as Base
let instanceOfExtended = anInstance as Extended
func aMethod<T:Base>(_ instance:T) {}
aMethod(anInstance)
aMeth
协议和类绑定协议有什么区别,我们应该在Swift中使用哪一种协议?
protocol A : class { ... }
protocol A { ... }
当未将协议定义为weak时,尝试添加: class委托时会出现错误
protocol A { ... }
weak var delegate: A
给出错误:
“弱”不能应用于非类类型。
或
不能将“弱”应用于非类绑定的“A”;考虑添加具有类约束的协议一致性。
我正在尝试定义一个扩展协议A的协议B(后者包含相关的类型C),同时按照编译器的建议使用带有相同类型约束的where子句。然而,当这样做的时候,代码将不再编译。这是一个Swift bug (在本例中是Swift 4)吗?
更具体地说,下面的代码编译时没有出现错误:
类型“E”不符合协议“A”
class D {
}
protocol A: class {
associatedtype C: AnyObject
}
protocol B: A where C == D {
}
class E: B {
}
如下所示更改协议B的定义将进行编译,但将显示此警告:
Typealias
我有一个UICollectionViewCell子类,它实现如下协议:
protocol SpecialCell where Self: UICollectionViewCell {
associatedType T: SpecialCellViewModel // protocol
var viewModel: T? { get set }
}
在取消单元排队时,为了访问UICollectionViewCell属性,我必须将SpecialCell强制转换为符合SpecialCell的类型。我就是这样尝试的:
let cell = collectionView.dequeueReus
我使用的是符合具有NSOperation属性的SomeProtocol的results
let op : NSOperation, SomeProtocol = ...
op.completionBlock = {
print(op.results)
}
我得到以下错误:
Value of type 'NSOperation' has no member 'results'
我知道我可以子类NSOperation来获得预期的行为,但是我能使用协议实现我想要的吗?
我定义了协议:
protocol MyProtocol: class {
}
class MyClass: MyProtocol {
}
以及仅用于具有类元素的集合的扩展:
extension CollectionType where Generator.Element: class {
func someFunc() {
}
}
var items = [MyClass]()
items.someFunc() // someFunc is available
var strings = [String]()
// strings.someFunc() is not
在Swift中,如何声明符合协议的变量(或常量)?
我试过了
let whatever: protocol <myProtocol>
和
let whatever: myProtocol
但是在设置它的时候,我得到了错误
Cannot convert the expression's type '()' to type 'myProtocol'
Hy,我正在尝试构建一个基类,它执行在应用程序中重复自己的某些操作,但是我面临一个我无法理解的问题,下面的代码说明了我试图构建的内容:
protocol GenericSection { }
protocol GenericRow { }
protocol GenericModel {
var section: GenericSection { get }
var items: [GenericRow] { get }
}
protocol GenericVM {
var model: [GenericModel] { get set }
}
class Exam
根据注释中引用的错误消息,以下代码失败。它已经被归结为最低限度,所以下面的代码没有明显的实用价值。我只是试图处理真正奇怪的(在我看来)错误消息。我之所以将数组声明为[P]而不是[S],是因为数组内容的常见运行时多态性。
protocol P {
func sp()
}
struct S: P {
func sp() {}
}
extension Array where Element: P {
func am() {}
}
func t() {
let goodA = [S]()
goodA.am() // No problem
let
public protocol Subscriber : class {
}
public struct Subscription {
private weak var subscriber:AnyObject<Subscriber>? = nil
}
为什么我不能将AnyObject和协议一起用于这个var?