相关疑难解决方法(0)

Swift中的'open'关键字是什么?

ObjectiveC.swift从标准库文件包含大约228行代码下面几行:

extension NSObject : Equatable, Hashable {
  /// ...
  open var hashValue: Int {
    return hash
  }
}
Run Code Online (Sandbox Code Playgroud)

open var在这种情况下意味着什么,或者open一般来说关键字是什么?

syntax declaration modifier swift swift3

308
推荐指数
3
解决办法
9万
查看次数

你可以覆盖Swift中的扩展名吗?(编译器似乎很困惑!)

我一直在使用Swift中的iOS应用程序(其中大部分都是从Objective-C中移除的).我正在使用Core Data并尝试使用扩展来为我的模型自动生成的类添加功能.我在Objective-C中做的一件事就是在类A的类别中添加一个方法,并在类B(从A派生)的类别中覆盖该方法,我希望在Swift中也这样做.

有一段时间我在我的项目中已经有了以下代码(这只是一个例子),虽然我还没有使用过这个功能,但编译器已经很好地编译了这段代码:

// From CellType.swift -- NOTE: Imports from Foundation and CoreData
@objc(CellType)
class CellType: NSManagedObject {
    @NSManaged var maxUses: NSNumber
    @NSManaged var useCount: NSNumber
    // Other properties removed for brevity
}


// From SwitchCellType.swift -- NOTE: Imports from Foundation and CoreData
@objc(SwitchCellType)
class SwitchCellType: CellType {
    @NSManaged var targetCellXIndex: NSNumber
    @NSManaged var targetCellYIndex: NSNumber
    @NSManaged var targetCellType: CellType
    // Other properties removed for brevity
}


// From CellTypeLogic.swift -- NOTE: Imports from Foundation and CoreData
extension CellType
{ …
Run Code Online (Sandbox Code Playgroud)

overriding swift swift-extensions

33
推荐指数
1
解决办法
2万
查看次数

无法覆盖另一个模块swift中类扩展中声明的open方法

我在另一个模块(使用pod)中声明了类扩展.

public extension UIView {
  open func doStuff() {...}
}
Run Code Online (Sandbox Code Playgroud)

当我尝试在当前项目模块中的子类中重写此方法时

class ConcreteView : UIView {
  override open func doStuff() {...}
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

覆盖其定义模块之外的非打开实例方法

尽管该方法实际上标记为开放

作为一种解决方法,我在同一模块中声明了另一个类,其中声明了扩展并在那里覆盖了所需的方法

public class CustomView: UIView {
  override open func doStuff() {...}
}
Run Code Online (Sandbox Code Playgroud)

并在主模块中将此类设置为我的类的超类

class ConcreteView : CustomView
Run Code Online (Sandbox Code Playgroud)

所以只有在此之后我才能覆盖该方法.

它看起来真的像swift3中的一个错误,但也许我已经省略了为什么它以这种方式工作的一些理解?

ios swift swift3

6
推荐指数
1
解决办法
5827
查看次数