ios - swift 中的协议(protocol)引用抛出段错误 11

标签 ios xcode date swift calendar

我试图在 Swift 中大量使用协议(protocol)来创建日期和日历实现,但它开始在每种方法中抛出段错误 11。我现在的是这样的:

protocol CalendarUnit {
  typealias C: Calendar
  init(_ date: Date<C>)
}

protocol Calendar {
  typealias Second: CalendarUnit
}

struct GregorianCalendar: Calendar {

  struct Second: CalendarUnit {
  }
}

struct Date<C: Calendar> {
  let timestamp: Int

  var second: C.Second { return C.Second(self) }
}

怀疑是因为两种协议(protocol)的递归,但不确定如何以另一种方式实现此部分。感谢任何帮助,提前致谢

编辑

也可以在 calendarunit 的初始化器和它所属的日历之间使用类型限制。

protocol CalendarUnit {
  init<C>(date: Date<C>)
}

protocol Calendar {

  typealias Year: CalendarUnit
}

struct GregorianCalendar: Calendar {

  struct Year: CalendarUnit {

    init<C>(date: Date<C>) {
    }
  }
}

struct JulianCalendar: Calendar {

  struct Year: CalendarUnit {

    init<GregorianCalendar>(date: Date<GregorianCalendar>) {
    }
  }
}

struct Date<C: Calendar> {
}

在示例中,我可以插入任何日历(格里高利历中的朱利安)并将满足协议(protocol)需要,但它不保证它是相同的日历。有没有办法强制执行此限制,最好不必在类型别名中重复日历的名称?

最佳答案

首先:llvm 抛出段错误始终是编译器中的一个错误,无论您的语法是否正确,您都应该为它做好准备。

关于您的问题:我认为您不需要递归定义。您可以通过这样的实现实现我认为您需要的:

import Foundation

protocol CalendarUnit {
  init<T>(_ date: Date<T>)
}

protocol Calendar {
  typealias Second: CalendarUnit
}

struct GregorianCalendar: Calendar {

  struct Second: CalendarUnit {
      init<T>(_ date: Date<T>) {
          println("Initialized")
      }
  }
}

struct Date<C: Calendar> {
  let timestamp: Int

  var second: C.Second { return C.Second(self) }
}

let test = Date<GregorianCalendar>(timestamp: 0)
let seconds = test.second

关于ios - swift 中的协议(protocol)引用抛出段错误 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28385607/

相关文章:

javascript - 如何跨时区正确转换时间?

ios - ld : framework not found Pods_MyProject_MyProjectTests

ios - 如何用唯一名称初始化多个对象

ios - 如何为下一个/后一个 UIImageView 创建滑动

iphone - 如何在没有用户交互的情况下自动更新企业应用程序

objective-c - 我可以仅使用 Interface Builder 将 nib 内容加载到 UIView 中吗?

c++ - 从 C/C++ 中的日期和时间转换为 UNIX 时间戳的正确方法是什么?

javascript - js 日期更改为 10 月 10 日(英国夏令时)

ios - DJI sdk 获取RTK信息

ios - 如何在tableview单元格中重复图像?我只想重复5张图像,并且只应包含100行