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
}
}