swift - स्विफ्ट 3: प्रीसेडेंस ग्रुप को कैसे संभालना है ऑपरेटर को शरीर के साथ घोषित किया जाना चाहिए?
operators swift3 (1)
ऑपरेटर के लिए पूर्व स्विफ्ट 3 कोड था:
infix operator × {associativity left precedence 150}
लेकिन अब, एक्सकोड 8 बीटा 6 के अनुसार, यह निम्नलिखित चेतावनी उत्पन्न करता है:
"operator should not be declared with body"
Precedencegroup predicate का उपयोग करने का सही तरीका क्या है क्योंकि अभी कोई दस्तावेज़ मौजूद नहीं है?
मैंने कोशिश की है, लेकिन काम नहीं करता है:
infix operator × : times
precedencegroup times {
associativity: left
precedence: 150
}
SE-0077 अनुसार, ऑपरेटर की प्राथमिकता अब एक जादू संख्या द्वारा निर्धारित नहीं की जाती है - इसके बजाय अब आप higherThan
समूह का उपयोग करते हैं और (यदि समूह किसी अन्य मॉड्यूल में रहता है) तो lowerThan
समूह precedencegroup
समूह संबंध अन्य समूहों के सापेक्ष प्राथमिकता को परिभाषित करने के लिए।
उदाहरण के लिए ( SE-0077 ):
// module Swift precedencegroup Additive { higherThan: Range } precedencegroup Multiplicative { higherThan: Additive } // module A precedencegroup Equivalence { higherThan: Comparative lowerThan: Additive // possible, because Additive lies in another module } infix operator ~ : Equivalence 1 + 2 ~ 3 // same as (1 + 2) ~ 3, because Additive > Equivalence 1 * 2 ~ 3 // same as (1 * 2) ~ 3, because Multiplicative > Additive > Equivalence 1 < 2 ~ 3 // same as 1 < (2 ~ 3), because Equivalence > Comparative 1 += 2 ~ 3 // same as 1 += (2 ~ 3), because Equivalence > Comparative > Assignment 1 ... 2 ~ 3 // error, because Range and Equivalence are unrelated
यद्यपि आपके मामले में, जैसा कि ऐसा प्रतीत होता है कि आपके ऑपरेटर को गुणा के लिए उपयोग किया जाता है, आप बस मानक लाइब्रेरी के MultiplicationPrecedence
समूह का उपयोग कर सकते हैं, जिसका उपयोग *
ऑपरेटर के लिए किया जाता है:
infix operator × : MultiplicationPrecedence
इसे परिभाषित किया गया है:
precedencegroup MultiplicationPrecedence {
associativity: left
higherThan: AdditionPrecedence
}
मानक पुस्तकालय प्राथमिकता समूहों की पूरी सूची के साथ-साथ इस परिवर्तन के बारे में अधिक जानकारी के लिए, SE-0077 ।