Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.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
Struct 有没有办法隐藏Swift结构的默认初始值设定项?_Struct_Protocol Oriented - Fatal编程技术网

Struct 有没有办法隐藏Swift结构的默认初始值设定项?

Struct 有没有办法隐藏Swift结构的默认初始值设定项?,struct,protocol-oriented,Struct,Protocol Oriented,我有一个名为参数的协议: 我还有16个符合参数的结构: struct:参数{ 变量名称:String var单位:单位? var值:双 初始值(名称:String=“cacium”,单位:unit?=UnitDispersion.partsPerMillion,值:Double){ self.name=名称 self.unit=单位 自我价值=价值 } } 结构碱度:参数{ 变量名称:String var单位:单位? var值:双 初始值(名称:String=“碱度”,单位:单位?=单位(符号

我有一个名为
参数
的协议:

我还有16个符合
参数
的结构:

struct:参数{
变量名称:String
var单位:单位?
var值:双
初始值(名称:String=“cacium”,单位:unit?=UnitDispersion.partsPerMillion,值:Double){
self.name=名称
self.unit=单位
自我价值=价值
}
}
结构碱度:参数{
变量名称:String
var单位:单位?
var值:双
初始值(名称:String=“碱度”,单位:单位?=单位(符号:“ppm CaCO3”),值:双精度){
self.name=名称
self.unit=单位
自我价值=价值
}
} 
结构盐度:参数{
变量名称:String
var单位:单位?
var值:双
初始值(名称:String=“盐度”,单位:单位?=单位(符号:“SG”),值:双精度){
self.name=名称
self.unit=单位
自我价值=价值
}
} 
结构温度:参数{
变量名称:String
var单位:单位?
var值:双
初始值(名称:String=“Temperature”,单位:unit?=UnitTemperature.fahrenheit,值:Double){
self.name=名称
self.unit=单位
自我价值=价值
}
}
结构PH:参数{
变量名称:String
var单位:单位?
var值:双
初始值(名称:String=“pH”,单位:unit?=nil,值:Double){
self.name=名称
self.unit=单位
自我价值=价值
}
}
结构镁:参数{
变量名称:String
var单位:单位?
var值:双
init(name:String=“mg”,单位:unit?=UnitDispersion.partsPerMillion,值:Double){
self.name=名称
self.unit=单位
自我价值=价值
}
}
结构:参数{
变量名称:String
var单位:单位?
var值:双
init(name:String=“Phosphate”,单位:unit?=UnitDispersion.partsPerMillion,值:Double){
self.name=名称
self.unit=单位
自我价值=价值
}
}
结构:参数{
变量名称:String
var单位:单位?
var值:双
init(name:String=“ammonium”,单位:unit?=UnitDispersion.partsPerMillion,值:Double){
self.name=名称
self.unit=单位
自我价值=价值
}
}
结构:参数{
变量名称:String
var单位:单位?
var值:双
初始值(名称:String=“Silica”,单位:unit?=UnitDispersion.partsPerMillion,值:Double){
self.name=名称
self.unit=单位
自我价值=价值
}
}
结构:参数{
变量名称:String
var单位:单位?
var值:双
init(name:String=“碘”,单位:unit?=UnitDispersion.partsPerMillion,值:Double){
self.name=名称
self.unit=单位
自我价值=价值
}
}
结构:参数{
变量名称:String
var单位:单位?
var值:双
init(name:String=“nitor”,单位:unit?=UnitDispersion.partsPerMillion,值:Double){
self.name=名称
self.unit=单位
自我价值=价值
}
}
结构:参数{
变量名称:String
var单位:单位?
var值:双
init(name:String=“亚硝酸盐”,单位:unit?=UnitDispersion.partsPerMillion,值:Double){
self.name=名称
self.unit=单位
自我价值=价值
}
}
结构锶:参数{
变量名称:String
var单位:单位?
var值:双
初始值(名称:String=“锶”,单位:unit?=UnitDispersion.partsPerMillion,值:Double){
self.name=名称
self.unit=单位
自我价值=价值
}
}
结构ORP:参数{
变量名称:String
var单位:单位?
var值:双
init(name:String=“ORP”,单位:unit?=UnitDispersion.partsPerMillion,值:Double){
self.name=名称
self.unit=单位
自我价值=价值
}
}
结构:参数{
变量名称:String
var单位:单位?
var值:双
初始值(名称:String=“borbon”,单位:unit?=UnitDispersion.partsPerMillion,值:Double){
self.name=名称
self.unit=单位
自我价值=价值
}
}
结构铁:参数{
变量名称:String
var单位:单位?
var值:双
init(name:String=“Iron”,单位:unit?=UnitDispersion.partsPerMillion,值:Double){
self.name=名称
self.unit=单位
自我价值=价值
}
}
如您所见,所有结构都实现相同的初始值设定项。在初始值设定项中,我为
参数
协议所需的三个参数中的两个提供默认值,这为我提供了以下初始值设定项:

让钙=钙(值:双)
我还获得了由结构创建的默认初始值设定项:

让钙=钙(名称:字符串,单位:单位?,值:双精度)
当我创建结构实例时,两个初始值设定项都出现在Xcode的代码完成弹出窗口中。但是,我不希望
名称
单位
参数与初始值设定项中提供的默认值有任何不同。我还尝试为
名称
单元
属性指定默认值,这些属性在结构内部声明,但在
参数
协议要求的初始值设定项之外

是否有一种方法可以通过为
名称
单元
参数提供默认值来初始化结构,只需要提供
参数,而不需要在Xcode的代码完成弹出窗口中显示默认初始值设定项

让两个初始值设定项出现在Xcode的代码完成弹出窗口中,我唯一关心的是,我不希望其他人创建结构并提供除t以外的值
protocol Parameter {

    var name: String { get }
    var unit: Unit? { get }
    var value: Double { get }

    init(name: String, unit: Unit?, value: Double)

}
protocol Parameter {
    var name: String? { get }
    var unit: Unit? { get }
    var value: Double? { get }
    //init(name: String, unit: Unit?, value: Double)
    init(value: Double)
}
struct Calcium: Parameter {

    var name: String? = nil
    var unit: Unit? = nil
    var value: Double? = nil

    init(value: Double) {
        self.init(name: "Calcium", unit: UnitDispersion.partsPerMillion, value: value)
    }

    private init(name: String, unit: Unit, value: Double) {
        self.name = name
        self.unit = unit
        self.value = value
    }

}