मैं विभिन्न इकाइयों के साथ काम कर रहा हूँ, यानी distance
, altitude
, speed
, volume
, आदिविस्तार प्रकार उपनाम तेज
मेरा लक्ष्य, अनुप्रयोग में उन्हें फ़ॉर्मेट करने के लिए उदाहरण के लिए एक सुंदर, अनोखा तरीका है myValue.formatted
बुला:
let mySpeed: Speed = 180
println(mySpeed.formatted) // 5.0 km/h
let myAltitude: Altitude = 4000
println(myAltitude.formatted) // 4000 m
मैंने सोचा था कि इस प्रकार के उपनाम का उपयोग कर के लिए एक अच्छा मामला था।
typealias Distance = Float
typealias Altitude = Float
typealias Speed = Float
formatted
संपत्ति के लिए, मैं प्रकार Float
के extension
साथ करने की कोशिश की:
extension Float {
var formatted: String {
get {
switch self {
case is Altitude:
return "\(self) m"
case is Speed:
return "\(self * 3.6) km/h"
default:
return "\(self)"
}
}
}
}
लेकिन संकलक का कहना है कि मेरी case
ब्लॉक हमेशा true
हैं।
तो मैं एक प्रकार का विस्तार करने की कोशिश की:
extension Speed {
var formatted: String {
return "\(self * 3.6) km/h"
}
}
extension Altitude {
var formatted: String {
return "\(self) m"
}
}
संकलक अब स्पष्ट रूप से कहा गया है 'स्वरूपित'
ठीक की अमान्य पुन: घोषणा, अब यह कैसे प्रकार उपनाम काम स्पष्ट है। लेकिन मैं अपने .formatted
संपत्ति को स्विफ्ट में विभिन्न प्रकार के फ्लोट्स के लिए कैसे प्राप्त करूं?
यह वास्तव में बहुत दिलचस्प है। यह थोड़ा निराशाजनक है कि मैं 'फ्लोट वार को स्पीड' नहीं डाल सकता, यानी 'as' कीवर्ड का उपयोग कर रहा हूं। टाइप उपनाम इस तरह से सुरुचिपूर्ण था। – gpbl
@crumblenaut आप सही हैं। स्पीड अब 'फ्लोट 'नहीं है। यह उपयोगकर्ता परिभाषित कस्टम प्रकार है।आप एक फंक्शन के साथ 'फ़्लोट' को एक प्रकार से प्रारूपित कर सकते हैं। अगर आप वास्तव में ऐसा करना चाहते हैं तो 'प्रारूप स्पीड', एक्सटेंशन में प्रारूप डिस्टेंस का उपयोग करें। – codester