यह source एक पैराग्राफ एक बंद या समारोह के साथ एक डिफ़ॉल्ट संपत्ति मूल्य निर्धारित करना है, जहां हम एक उदाहरणबंद के साथ डिफ़ॉल्ट संपत्ति के मूल्य सभी फाइलों
यहाँ पा सकते हैं कि कैसे की एक कंकाल रूपरेखा है है पुन: संयोजित करने के लिए एक संकलक बनाता है
class SomeClass { let someProperty: SomeType = { // create a default value for someProperty inside this closure // someValue must be of the same type as SomeType return someValue }() }
ठीक है, मैं यह बहुत बार का उपयोग करें ... इसके अलावा, मैं अक्सर पूरी परियोजना recompil के लिए प्रतीक्षा: एक बंद एक डिफ़ॉल्ट संपत्ति के मूल्य प्रदान करने के लिए इस्तेमाल किया जा सकता ई सिर्फ एक प्रतीक बदलने के बाद। और आज मैंने पाया है कि ये दो चीजें एक-दूसरे से जुड़ी हैं।
चलें कल्पना हम कुछ वर्ग है जहां हम एक बंद के साथ और एक समारोह के साथ
class Class1 {
let value: Int
init(_ value: Int) {
self.value = value
}
private lazy var lazyValueWithClosure: Int = {
return 1111
}()
private lazy var lazyValueWithFunction: Int = self.getValue()
private func getValue() -> Int {
return 2222
}
}
इसके अलावा हम एक अलग फाइल में कुछ अन्य वर्ग जहां हम ऊपर Class1
class Class2 {
let value: Int
init(_ value: Int) {
self.value = value
_ = Class1(100)
}
}
का उपयोग किया है कुछ डिफ़ॉल्ट गुण सेट
और एक अलग फाइल जहां हम Class2
class Class3 {
let value: Int
init(_ value: Int) {
self.value = value
_ = Class2(100)
}
}
01 का उपयोग में कुछ अन्य वर्ग
और आदि ...
मैं terminal
+ xcodebuild
+ grep
कंपाइल फ़ाइलों के बारे में केवल जानकारी पाने के लिए उपयोग करने के लिए तय कर लिया है। संकलन जानकारी प्राप्त करने के लिए मैं वह आदेश देता हूं:
xcodebuild -scheme Test -sdk iphonesimulator -arch x86_64 -configuration Debug build OTHER_SWIFT_FLAGS="-Xfrontend -debug-time-function-bodies" | grep '^[0-9]\{1,20\}.[0-9]\{1,20\}ms.*init(_ value: Int)'
यह सब तैयारियों के लिए है। अब हम Class1
पर जाएं और 2222
को किसी अन्य मान में बदलें। उपरोक्त आदेश चलाएं और परिणाम प्राप्त करें।
0.1ms /Users/iwheelbuy/Documents/recompile/Test/Classes/Class1.swift:11:5 init(_ value: Int)
परिणाम अच्छा है। कार्यों के साथ डिफ़ॉल्ट मान सेट करना अपेक्षित काम करता है। हमने एक फाइल बदल दी है और केवल एक फाइल संकलित की गई है।
फिर 1111
को Class1
से किसी अन्य मान में बदलें और कमांड चलाएं। टर्मिनल उत्पादन अब इस तरह दिखता है:
0.8ms /Users/iwheelbuy/Documents/recompile/Test/Classes/Class5.swift:11:5 init(_ value: Int)
0.3ms /Users/iwheelbuy/Documents/recompile/Test/Classes/Class1.swift:11:5 init(_ value: Int)
1.0ms /Users/iwheelbuy/Documents/recompile/Test/Classes/Class4.swift:11:5 init(_ value: Int)
0.3ms /Users/iwheelbuy/Documents/recompile/Test/Classes/Class3.swift:11:5 init(_ value: Int)
0.3ms /Users/iwheelbuy/Documents/recompile/Test/Classes/Class2.swift:11:5 init(_ value: Int)
सभी वर्गों कंपाइल किया गया ... अब कल्पना आप एक बड़े परियोजना और एक डिफ़ॉल्ट मान बंद में किसी भी छोटे परिवर्तन पूरी परियोजना पुन: संयोजित करने के लिए आप प्रतीक्षा करता है है।
सवाल:
- कारण क्या है?
- कोई भी सुझाव डिफ़ॉल्ट मूल्य बंद करने का उपयोग कैसे करें और पुन: संकलन से पीड़ित नहीं है?
- this topic से संबंधित?
मेरी इच्छा है कि मैंने आपकी पोस्ट पहले पढ़ ली है ... – iWheelBuy