Tôi cũng gặp sự cố này và tôi đã tìm thấy một giải pháp cho trường hợp của mình.
Trong bài viết này tác giả có cùng một vấn đề
https://www.iphonelife.com/blog/31369/swift-programming-101-generics-practical-guide
Vì vậy, vấn đề dường như là, trình biên dịch cần phải suy ra kiểu của T bằng cách nào đó. Nhưng nó không được phép chỉ sử dụng chung chung <type> (params ...).
Thông thường, trình biên dịch có thể tìm kiểu của T, bằng cách quét các kiểu tham số vì đây là nơi T được sử dụng trong nhiều trường hợp.
Trong trường hợp của tôi thì hơi khác một chút, vì kiểu trả về của hàm của tôi là T. Trong trường hợp của bạn, có vẻ như bạn đã không sử dụng T trong hàm của mình. Tôi đoán bạn chỉ đơn giản hóa mã ví dụ.
Vì vậy, tôi có chức năng sau
func getProperty<T>( propertyID : String ) -> T
Và trong trường hợp, chẳng hạn
getProperty<Int>("countProperty")
trình biên dịch cho tôi lỗi:
Không thể chuyên môn hóa một cách rõ ràng một hàm chung chung
Vì vậy, để cung cấp cho trình biên dịch một nguồn thông tin khác để suy ra kiểu của T từ đó, bạn phải khai báo rõ ràng kiểu của biến mà giá trị trả về được lưu trong đó.
var value : Int = getProperty("countProperty")
Bằng cách này, trình biên dịch biết rằng T phải là một số nguyên.
Vì vậy, tôi nghĩ về tổng thể nó chỉ đơn giản có nghĩa là nếu bạn chỉ định một hàm chung, ít nhất bạn phải sử dụng T trong các kiểu tham số của bạn hoặc như một kiểu trả về.