Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么我会得到;无法推断泛型参数",泛型_Ios_Swift_Generics_Protocols - Fatal编程技术网

Ios 为什么我会得到;无法推断泛型参数",泛型

Ios 为什么我会得到;无法推断泛型参数",泛型,ios,swift,generics,protocols,Ios,Swift,Generics,Protocols,我正在通过创建一些符合名为营养学 protocol Nutrition { var calories: Double { get set } var price: Double { get set } } struct Hamburger: Nutrition { var calories = 100.0 var price = 8.0 } struct PadThai:

我正在通过创建一些符合名为
营养学

protocol Nutrition {
        var calories: Double { get set }
        var price: Double { get set }
    }

    struct Hamburger: Nutrition {
        var calories    =   100.0
        var price       =   8.0
    }

    struct PadThai: Nutrition {
        var calories    =   110.0
        var price       =   8.50
    }
接下来,我将创建一个struct
Individual
,它有一个使用泛型类型的方法:

struct Individual {

    var firstName: String
    var lastName: String

    init(fName: String, lName: String)
    {
        firstName   =   fName
        lastName    =   lName
    }

    func eat<T: Nutrition>(food: T) -> T {
        return food
    }
编译器不断抱怨:

Generic parameter 'T' could not be inferred

我也在看其他关于这个错误的帖子,但仍然找不到解决办法。是否有人知道如何修复此问题。

您的阵列需要的是实例,而不是类型本身:

let array: [Nutrition] = [
    Individual(fName: "A", lName: "AAA").eat(Hamburger()),
    Individual(fName: "B", lName: "BBB").eat(PadThai())
]

阵列需要的是实例,而不是类型本身:

let array: [Nutrition] = [
    Individual(fName: "A", lName: "AAA").eat(Hamburger()),
    Individual(fName: "B", lName: "BBB").eat(PadThai())
]

您试图将一个类型传递到一个需要该类型的实例的对象中。注意:在标识符中使用完整的单词是Swift的惯例
firstName
lastName
比参数名
fName
lName
更可取。为什么它们与结构成员名称不一致?@AlexanderMomchliov:我之所以命名fName和lName是因为我想让它变得简单。不过,你是对的,名称应该是一致的,以便更清楚、更可读。您试图将一个类型传递到需要该类型的实例的内容中。注意:在标识符中使用全字是Swift的惯例
firstName
lastName
比参数名
fName
lName
更可取。为什么它们与结构成员名称不一致?@AlexanderMomchliov:我之所以命名fName和lName,是因为我想让它变得简单。但是,你是对的,名称应该一致,以便更清楚、更可读。