Tôi đã nâng cấp lên Xcode 11 & swift 5 và gặp sự cố với tiện ích mở rộng phương thức khi chúng được cung cấp qua khung. Cụ thể hơn, trong một dự án có cấu trúc như thế này:
-> Main Project
-> Framework created from sources in 'Main Project'
-> Subproject using the above Framework (Sources packaged in the framework are not visible to the sub-project)
Mọi thứ biên dịch và chạy tốt, nhưng khi chạy các phiên gỡ lỗi trên tiểu dự án, tất cả các tiện ích mở rộng trong 'Framework' trở lại error: ambiguous use of
khi được gọi từ dòng lệnh lldb. Đây là một mẫu mã để đưa ra một ý tưởng:
Tạo dự án dòng lệnh macOs và thêm mục tiêu mới, 'MagicFramework' và trong tệp Spells.swift (đảm bảo tệp hiển thị với Main & MagicFramework)
import Foundation
extension String {
public func castSpell() -> String {
return "✨ " + self
}
}
Sau đó, tạo một tiểu dự án 'Trình hướng dẫn' và trong tệp wizard.swift (chỉ hiển thị với Trình hướng dẫn):
import Foundation
import MagicFramework
public class Tadaa {
public func magic(spell:String) -> String {
return spell.castSpell()
}
}
trong tệp main.swift của Wizard, thêm:
import Foundation
let aa = Tadaa().magic(spell: "this is magic")
print(aa)
Bạn nên có cấu trúc sau:
-> Main project
----> MagicFramework
----> Wizard subproject
sau đó xây dựng và chạy phụ 'Wizard', với một điểm dừng spell.castSpell()
trong Tadaa
. Tại dấu nhắc lldb, gõ:
(lldb)po spell.castSpell()
error: <EXPR>:3:1: error: ambiguous use of 'castSpell()'
spell.castSpell()
tại sao?? Vấn đề này đã không xảy ra với Xcode 10.