提问人:Shawn Frank 提问时间:6/7/2023 最后编辑:Shawn Frank 更新时间:6/7/2023 访问量:48
iOS 应用程序在将协议拆分为多个协议并使用 typealias 组合它们时崩溃
iOS App Crashes when splitting out protocol into multiple protocols and combining them using typealias
问:
我有以下协议
protocol Three {
var a1: Bool { get }
var a2: Bool { get }
var c1: Int { get }
func test()
}
然后我有一个符合此协议的结构
struct ThreeTest: Three {
var text: String
init(_ text: String) {
self.text = text
}
}
// A
extension ThreeTest {
var a1: Bool {
return true
}
var a2: Bool {
return true
}
}
// B
extension ThreeTest {
func test() {
print("test")
}
}
// C
extension ThreeTest {
var c1: Int {
return 10
}
}
我是这样使用它的:
struct ViewModel {
var three: Three
init() {
three = ThreeTest("hello")
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let vm = ViewModel()
print("all good")
}
}
这工作正常,并打印到控制台。all good
我接下来要做的是将协议拆分为多个协议,并使用typealias
protocol A {
var a1: Bool { get }
var a2: Bool { get }
}
protocol B {
func test()
}
protocol C {
var c1: Int { get }
}
typealias Three = A & B & C
如果您在测试应用程序中运行它,您会看到它编译并且运行良好,没有任何问题,但是,这完全相同的东西使我的应用程序崩溃Thread 1: EXC_BAD_ACCESS (code=2, address=0x102b7ff38)
虽然我知道您将无法为我的情况提供解决方案,因为您没有足够的信息并且无法复制
我的问题是,当您有一个协议时,在运行时后会发生什么不同,与将相同的需求拆分为多个协议并使用 typealias 组合多个协议?
答: 暂无答案
评论
protocol Three: A, B, C {}