Tôi đang gặp khó khăn khi liên kết khung của tôi với mã tận dụng khung công tác đó. Cụ thể, trình liên kết không thể tìm thấy các biểu tượng cho các phần mở rộng cho cấu trúc generics.Swift Framework không bao gồm các biểu tượng từ các phần mở rộng đến các cấu trúc chung
Đây là những gì một trong những phần mở rộng trông giống như cho Tùy chọn:
extension Optional {
/// Unwrap the value returning 'defaultValue' if the value is currently nil
func or(defaultValue: T) -> T {
switch(self) {
case .None:
return defaultValue
case .Some(let value):
return value
}
}
}
Phương pháp này hoạt động tuyệt vời trong một sân chơi hoặc trong một ứng dụng nếu mã được biên dịch trong phần chính của ứng dụng. Tuy nhiên, khi tôi cố gắng biên dịch này vào một khuôn khổ, ứng dụng (và thậm chí các cuộc thử nghiệm cho khung công tác) tạo ra mối liên kết lỗi sau:
Undefined symbols for architecture i386: "__TFSq2orU__fGSqQ__FQQ", referenced from: __TFC18SwiftPlusPlusTests27Optional_SwiftPlusPlusTests13testOrWithNilfS0_FT_T_ in Optional+SwiftPlusPlusTests.o
phương pháp tương tự như dưới đây, liên kết tốt (thông báo, nó không phải là trên generic)
extension String {
/// Returns a string by repeating it 'times' times
func repeat(times: Int) -> String {
var result = ""
for i in 0..times {
result += self
}
return result
}
}
có hai phần mở rộng khác trong kho lưu trữ của tôi trên github: SwiftPlusPlus mà cũng không liên kết (cả trên strucs generic). Bạn sẽ tái tạo các lỗi nếu bạn kéo cam kết mới nhất, xây dựng khung công tác, và sau đó thử chạy các bài kiểm tra đơn vị.
Cho đến giờ tôi đã thử chạy "chuỗi" trên khung công khai và tệp trung gian và tôi không thấy biểu tượng cho các tiện ích mở rộng này nhưng tôi thấy biểu tượng cho tiện ích mở rộng repeat
trên String
. Vì vậy, nó thậm chí không có vẻ được biên dịch chúng vào thư viện.
Có ai biết tại sao các biểu tượng không được xác định trong khuôn khổ không?
Sửa
- Here là một liên kết đến mở rộng tùy chọn của tôi
- Here là một liên kết đến tập tin thử nghiệm khiến các mối liên kết lỗi khi cố gắng để biên dịch các mục tiêu thử nghiệm
BTW, nó được gọi chung chung thay vì mẫu trong Swift –
@BryanChen oh cuộc gọi tốt, tôi sẽ cập nhật câu hỏi của tôi, nhờ – drewag
bạn có thể liên kết đến các lớp được định nghĩa trong khung của bạn? và bạn có thể cần 'nhập YourFramworkModuleName' –