![](/img/trans.png)
[英]How I can build a custom Type without using any other Swift Type in Swift?
[英]Implementing UInt15 in Swift or any other custom integer or float custom type
有沒有一種簡單的方法來實現一個數字類型(整數或浮點數),該類型受限於您可以分配給它的值。 我的最終目標是擁有一個UInt15
類型,它是介於0
和32767
之間的 integer 和其他類似類型。
例如,我可以執行以下操作:
typealias HumanAge = Int
通過這種方式,我確保年齡始終為 integer。
如果我做:
typealias HumanAge = UInt8
不錯,現在它被限制為0
到255
之間的無符號 integer 。
但是人類活不了那么久,那么我將如何實現一個無符號Int
並且限制在0
和100
之間的HumanAge
類型,或者例如限制在13
和19
之間的無符號Int
的TeenAge
類型?
對於您的問題來說,這可能是一個矯枉過正的問題,但我想屬性包裝器應該能夠在這里為您提供幫助
@propertyWrapper struct AgeRestrictedInt {
var range = 0 ... 100
var wrappedValue: Int? = nil {
didSet { if let unwrappedValue = wrappedValue {
if range ~= unwrappedValue {
return
}
else {
wrappedValue = nil
}
}
}
}
}
您現在可以將您的年齡聲明為
@AgeRestrictedInt var normalHumanAge: Int?
@AgeRestrictedInt(range: 13 ... 19) var teenAge: Int?
現在如果你給這些變量賦值
self.normalHumanAge = 1
debugPrint(self.normalHumanAge) // optional (1)
self.normalHumanAge = 500
debugPrint(self.normalHumanAge) // nil
相似地
self.teenAge = 14
debugPrint(self.teenAge) //optional (14)
self.teenAge = 30
debugPrint(self.teenAge) // nil
您可以為每個變量指定自定義范圍值,也可以決定如果分配的值超出指定范圍時的默認值(例如這里將其設置為nil
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.