gpt4 book ai didi

ios - 为什么我不能访问自己?

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

我是 swift 的新手,我在返回类型方面遇到了麻烦。我有一个类/类型方法,它应该返回同一个类的一个实例。据我了解,返回实例类型不是 native Swift 行为。以下是我所做的示例代码:

public class CustomView: UIView {

class func createCustomView(arguments: Array) -> Self {
return createCustomViewInternal(arguments)
}

private class func createCustomViewInternal<T>(arguments: Array) -> T {

return CustomView(frame: CGRectZero).createCustomViewInstance(arguments) as! T
}

private func createCustomViewInstance(arguments: Array) -> Self {

//Do customization here.
---> return self
}

我无法在标记点访问自己。此外,如果我尝试以编程方式添加约束,我会收到编译器错误“无法将‘Self’类型的值转换为预期的参数类型‘AnyObject?’”。我哪里出错了?

在 Objective-C 中返回实例类型会简单得多。是否有更简单的方法返回 self ?

最佳答案

所以你想从 UIView 继承。

您可以使用具体类代替 Self。当您不想覆盖时,Self 仅与子类化相关。 使用 CustomView 而不是 Self 让很多事情变得更容易。

您可以使用一个类方法而不是两个。

您可以覆盖一个 init 方法,而不是这个自定义方法。

但如果您真的需要那样,这里有一个可行的解决方案:

import UIKit

public class CustomView: UIView {
public var property: Int = 0

public required override init(frame: CGRect) {
super.init(frame: CGRectZero)
}

required public init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

public class func createCustomView(param: Int) -> Self {
return createCustomViewInternal(param)
}

private class func createCustomViewInternal(param: Int) -> Self {
return self.init(frame: CGRectZero).createCustomViewInstance(param)
}

private func createCustomViewInstance(param: Int) -> Self {
self.property = param

return self
}
}

边注:

参数是具体的给定值。当您在方法中使用抽象值时,它被称为参数。

关于ios - 为什么我不能访问自己?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37677869/

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