나는 프로토콜 Parameter
라는이 : 당신이 볼 수 있듯이Swift Struct의 기본 초기화 프로그램을 숨기는 방법이 있습니까?
struct Calcium: Parameter {
var name: String
var unit: Unit?
var value: Double
init(name: String = "Calcium", unit: Unit? = UnitDispersion.partsPerMillion, value: Double) {
self.name = name
self.unit = unit
self.value = value
}
}
struct Alkalinity: Parameter {
var name: String
var unit: Unit?
var value: Double
init(name: String = "Alkalinity", unit: Unit? = Unit(symbol: "ppm CaCO3"), value: Double) {
self.name = name
self.unit = unit
self.value = value
}
}
struct Salinity: Parameter {
var name: String
var unit: Unit?
var value: Double
init(name: String = "Salinity", unit: Unit? = Unit(symbol: "SG"), value: Double) {
self.name = name
self.unit = unit
self.value = value
}
}
struct Temperature: Parameter {
var name: String
var unit: Unit?
var value: Double
init(name: String = "Temperature", unit: Unit? = UnitTemperature.fahrenheit, value: Double) {
self.name = name
self.unit = unit
self.value = value
}
}
struct PH: Parameter {
var name: String
var unit: Unit?
var value: Double
init(name: String = "pH", unit: Unit? = nil, value: Double) {
self.name = name
self.unit = unit
self.value = value
}
}
struct Magnesium: Parameter {
var name: String
var unit: Unit?
var value: Double
init(name: String = "Magnesium", unit: Unit? = UnitDispersion.partsPerMillion, value: Double) {
self.name = name
self.unit = unit
self.value = value
}
}
struct Phosphate: Parameter {
var name: String
var unit: Unit?
var value: Double
init(name: String = "Phosphate", unit: Unit? = UnitDispersion.partsPerMillion, value: Double) {
self.name = name
self.unit = unit
self.value = value
}
}
struct Ammonia: Parameter {
var name: String
var unit: Unit?
var value: Double
init(name: String = "Ammonia", unit: Unit? = UnitDispersion.partsPerMillion, value: Double) {
self.name = name
self.unit = unit
self.value = value
}
}
struct Silica: Parameter {
var name: String
var unit: Unit?
var value: Double
init(name: String = "Silica", unit: Unit? = UnitDispersion.partsPerMillion, value: Double) {
self.name = name
self.unit = unit
self.value = value
}
}
struct Iodine: Parameter {
var name: String
var unit: Unit?
var value: Double
init(name: String = "Iodine", unit: Unit? = UnitDispersion.partsPerMillion, value: Double) {
self.name = name
self.unit = unit
self.value = value
}
}
struct Nitrate: Parameter {
var name: String
var unit: Unit?
var value: Double
init(name: String = "Nitrate", unit: Unit? = UnitDispersion.partsPerMillion, value: Double) {
self.name = name
self.unit = unit
self.value = value
}
}
struct Nitrite: Parameter {
var name: String
var unit: Unit?
var value: Double
init(name: String = "Nitrite", unit: Unit? = UnitDispersion.partsPerMillion, value: Double) {
self.name = name
self.unit = unit
self.value = value
}
}
struct Strontium: Parameter {
var name: String
var unit: Unit?
var value: Double
init(name: String = "Strontium", unit: Unit? = UnitDispersion.partsPerMillion, value: Double) {
self.name = name
self.unit = unit
self.value = value
}
}
struct ORP: Parameter {
var name: String
var unit: Unit?
var value: Double
init(name: String = "ORP", unit: Unit? = UnitDispersion.partsPerMillion, value: Double) {
self.name = name
self.unit = unit
self.value = value
}
}
struct Boron: Parameter {
var name: String
var unit: Unit?
var value: Double
init(name: String = "Boron", unit: Unit? = UnitDispersion.partsPerMillion, value: Double) {
self.name = name
self.unit = unit
self.value = value
}
}
struct Iron: Parameter {
var name: String
var unit: Unit?
var value: Double
init(name: String = "Iron", unit: Unit? = UnitDispersion.partsPerMillion, value: Double) {
self.name = name
self.unit = unit
self.value = value
}
}
에서, 구조체의 모두가 같은 초기화를 구현 :
protocol Parameter {
var name: String { get }
var unit: Unit? { get }
var value: Double { get }
init(name: String, unit: Unit?, value: Double)
}
또한 Parameter
준수 (16) 구조체가 있습니다.
let calcium = Calcium(name: String, unit: Unit?, value: Double)
:
let calcium = Calcium(value: Double)
나는 또한 구조체에 의해 생성 된 기본 초기화를 얻을 : 이니셜 라이저에서는, 나는 나에게 다음과 같은 이니셜을주는 Parameter
프로토콜을 필요로하는 세 개의 매개 변수의 두 가지에 대한 기본 값을 제공
struct의 인스턴스를 만들 때 두 초기화 코드가 모두 Xcode의 코드 완료 팝업에 나타납니다. 그러나 name
및 unit
매개 변수가 이니셜 라이저에 제공된 기본값과 다른 값이 될 수 없도록하려고합니다. 또한 name
및 unit
속성의 기본값을 할당하려고 시도했으나 구조체 내부에서 선언되었지만 Parameter
프로토콜에 필요한 이니셜 라이저 외부에서는 선언되었습니다.
엑스 코드의 코드 완성 팝업의 기본 초기화 쇼를 가지고 있지 동안의 name
및 unit
매개 변수에 대한 기본값을 제공하는 경우에만 제공 할 value
매개 변수를 필요로하여 구조체를 초기화하는 방법이 있나요?
Xcode의 코드 완성 팝업에 두 초기화 코드가 모두 나타나는 것은 내가 다른 사람이 구조체를 만들고, Parameter
프로토콜에 필요한 이니셜 라이저에서 제공 한 것 이외의 값을 제공하는 것을 원하지 않는다는 것뿐입니다. .
나는 수업에서 그렇게 할 수 있다는 것을 알고 있지만 프로토콜 지향 프로그래밍과 구조체를 사용하여 내 마음을 올바르게 얻으려고 노력하고있다. 그것을 할 수