ฉันมีปัญหานี้เช่นกันและพบวิธีแก้ปัญหาสำหรับกรณีของฉัน
ในบทความนี้ผู้เขียนมีปัญหาเดียวกัน
https://www.iphonelife.com/blog/31369/swift-programming-101-generics-practical-guide
ดังนั้นปัญหาดูเหมือนว่าคอมไพเลอร์จำเป็นต้องสรุปประเภทของ T อย่างใด แต่ไม่อนุญาตให้ใช้ <type> ทั่วไป (params ... )
โดยปกติคอมไพลเลอร์สามารถค้นหาชนิดของ T ได้โดยการสแกนประเภทพารามิเตอร์เนื่องจากเป็นที่ที่ใช้ T ในหลายกรณี
ในกรณีของฉันมันแตกต่างกันเล็กน้อยเพราะประเภทการส่งคืนของฟังก์ชันของฉันคือ T. ในกรณีของคุณดูเหมือนว่าคุณไม่ได้ใช้ T เลยในฟังก์ชันของคุณ ฉันเดาว่าคุณเพิ่งทำให้โค้ดตัวอย่างง่ายขึ้น
ดังนั้นฉันจึงมีฟังก์ชันดังต่อไปนี้
func getProperty<T>( propertyID : String ) -> T
และในกรณีของตัวอย่างเช่น
getProperty<Int>("countProperty")
คอมไพเลอร์ให้ข้อผิดพลาด:
ไม่สามารถเชี่ยวชาญฟังก์ชันทั่วไปได้อย่างชัดเจน
ดังนั้นเพื่อให้แหล่งข้อมูลอื่นแก่คอมไพเลอร์ในการอนุมานประเภทของ T คุณต้องประกาศประเภทของตัวแปรอย่างชัดเจนว่าค่าที่ส่งคืนจะถูกบันทึกไว้
var value : Int = getProperty("countProperty")
วิธีนี้ทำให้คอมไพลเลอร์รู้ว่า T ต้องเป็นจำนวนเต็ม
ดังนั้นฉันคิดว่าโดยรวมก็หมายความว่าถ้าคุณระบุฟังก์ชันทั่วไปอย่างน้อยคุณต้องใช้ T ในประเภทพารามิเตอร์ของคุณหรือเป็นประเภทการส่งคืน