首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图覆盖支持安全记录但不编译

试图覆盖支持安全记录但不编译
EN

Stack Overflow用户
提问于 2018-10-08 22:25:09
回答 1查看 407关注 0票数 0

我正在将旧代码转换为Swift 4,它使用SecureCoding。苹果文档说,这是一个要求,但我的代码没有编译。我尝试在静态、func、var和class之间更改声明,但是这些声明都不能转换为Swift 4。

下面是我试图进行重写的代码:

代码语言:javascript
复制
 override public class func supportsSecureCoding() -> Bool {
        return true
    }

此错误显示为“方法不覆盖其超类中的任何方法”。参考文件

下面是完全更新的代码,其中包括解决方案

代码语言:javascript
复制
import CareKit

public class ZCCareMonthlySchedule : OCKCareSchedule  {

    var calendar: NSCalendar?

    public class func monthlyScheduleWithStartDate(startDate: NSDateComponents,  occurrencesFromJanuaryToDecember: [NSNumber], monthsToSkip: UInt, endDate: NSDateComponents?) -> ZCCareMonthlySchedule? {

        guard occurrencesFromJanuaryToDecember.count == 12
            else { return nil}

        //TODO: Requires fixing after CareKit is updated to handle sub classes

//        let schedule = super.initWithStartDate(startDate: startDate, endDate: endDate, occurrences: occurrencesFromJanuaryToDecember, timeUnitsToSkip: monthsToSkip)




        return nil

    }



    override public var type: OCKCareScheduleType {
        return OCKCareScheduleType.other
    }



    override public func numberOfEvents(onDate date: DateComponents) -> UInt {

        calendar = NSCalendar.init(calendarIdentifier: NSCalendar.Identifier.gregorian)
        calendar!.timeZone = NSTimeZone(abbreviation: "UTC")! as TimeZone


        let startMonth = calendar?.ordinality(of: NSCalendar.Unit.month, in: NSCalendar.Unit.era, for: self.startDate.date! )
        let endMonth = calendar?.ordinality(of: NSCalendar.Unit.month, in: NSCalendar.Unit.era, for: date.date! )
        let monthsSinceStart = startMonth! - endMonth!
        let month = calendar?.component(NSCalendar.Unit.month, from: date.date!)

        //TODO:  Add a unit test to verify this works
        let occurrences : UInt = ((UInt(monthsSinceStart) % (self.timeUnitsToSkip + 1)) == 0) ? self.occurrences[month!-1].uintValue : 0;

        return occurrences;
    }



    //MARK: NSSecureCoding Support


    override public static var supportsSecureCoding: Bool{
        return true
    }

    required convenience public init?(coder aDecoder: NSCoder) {

        self.init(coder: aDecoder)

    }

    //MARK: NSCopying Support
    override public func copy(with zone: NSZone?) -> Any {

        let theCopy = super.copy(with: zone) as! ZCCareMonthlySchedule

        return theCopy
    }

}
EN

回答 1

Stack Overflow用户

发布于 2018-10-09 01:57:48

由于@Paulw11 11,答案是将其作为静态变量放入变量中,如下所示:

代码语言:javascript
复制
 override public static var supportsSecureCoding: Bool{
        return true
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52710870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档