precedencegroupTablePrecedence {
? ? associativity: left
? ? higherThan: LogicalConjunctionPrecedence
}
precedencegroupSectionPrecedence {
? ? associativity: left
? ? higherThan: TablePrecedence
}
infixoperator+++ : TablePrecedence
infixoperator<<< : SectionPrecedence
precedencegroup: 定義了一個(gè)操作符優(yōu)先級(jí)別。操作符優(yōu)先級(jí)的定義和類型聲明有些相似,一個(gè)操作符比需要屬于某個(gè)特定的優(yōu)先級(jí)。
infix:表示要定義的是一個(gè)中位操作符,即前后都是輸入.
prefix:?前置運(yùn)算符.
postfix:后置運(yùn)算符.
associativity :定義了結(jié)合律,即如果多個(gè)同類的操作符順序出現(xiàn)的計(jì)算順序。
higherThan: 運(yùn)算的優(yōu)先級(jí),點(diǎn)積運(yùn)算是優(yōu)先于乘法運(yùn)算的。
lowerThan:來(lái)指定優(yōu)先級(jí)低于某個(gè)其他組。
分別聲明關(guān)聯(lián)性和優(yōu)先級(jí)
associativity Multiplicative left
precedence Multiplicative>Additive
precedence Exponentiative>Multiplicative
precedence Multiplicative {
? associativity(left)
? precedence(> Additive)
? precedence(< Exponentiative)
}
precedence Multiplicative {
? associativity: left
? precedence: higherThan(Additive)
? precedence: lowerThan(Exponentiative)
}
precedence Multiplicative {
? associativity(left)
? higherThan(Additive)
? lowerThan(Exponentiative)
}
precedence Multiplicative {
? associativity: left,
? higherThan: Additive,
? lowerThan: Exponentiative
}
precedence Multiplicative {
? associativity left
? higherThan Additive
? lowerThan Exponentiative
}
precedence Multiplicative {
? associativity left
? > Additive
? < Exponentiative
}
precedence Multiplicative : associativity(left),
higherThan(Additive),
lowerThan(Exponentiative)
precedence Multiplicative : associativity left,
higherThan Additive, lowerThan Exponentiative
precedence Multiplicative > Additive,
< Exponentiative,
associativity left
precedence left Multiplicative > Additive,
< Exponentiative
precedence associativity(left) Multiplicative > Additive,
< Exponentiative
Swift 標(biāo)準(zhǔn)庫(kù)中已經(jīng)定義了一些常用的運(yùn)算優(yōu)先級(jí)組,比如加法優(yōu)先級(jí) (AdditionPrecedence) 和乘法優(yōu)先級(jí) (MultiplicationPrecedence) 等,你可以在這里找到完整的列表
Standard library changes
precedencegroupAssignmentPrecedence {
? assignment: true
? associativity: right
}
precedencegroupTernaryPrecedence {
? associativity: right
? higherThan: AssignmentPrecedence
}
precedencegroupDefaultPrecedence {
? higherThan: TernaryPrecedence
}
precedencegroupLogicalDisjunctionPrecedence {
? associativity: left
? higherThan: TernaryPrecedence
}
precedencegroupLogicalConjunctionPrecedence {
? associativity: left
? higherThan: LogicalDisjunctionPrecedence
}
precedencegroupComparisonPrecedence {
? higherThan: LogicalConjunctionPrecedence
}
precedencegroupNilCoalescingPrecedence {
? associativity: right
? higherThan: ComparisonPrecedence
}
precedencegroupCastingPrecedence {
? higherThan: NilCoalescingPrecedence
}
precedencegroupRangeFormationPrecedence {
? higherThan: CastingPrecedence
}
precedencegroupAdditionPrecedence {
? associativity: left
? higherThan: RangeFormationPrecedence
}
precedencegroupMultiplicationPrecedence {
? associativity: left
? higherThan: AdditionPrecedence
}
precedencegroupBitwiseShiftPrecedence {
? higherThan: MultiplicationPrecedence
}
postfix operator ++
postfix operator --
// postfix operator !
prefix operator ++
prefix operator --
prefix operator !
prefix operator ~
prefix operator +
prefix operator -
// infix operator = : AssignmentPrecedence
infixoperator*=? : AssignmentPrecedence
infixoperator/=? : AssignmentPrecedence
infixoperator%=? : AssignmentPrecedence
infixoperator+=? : AssignmentPrecedence
infixoperator-=? : AssignmentPrecedence
infixoperator<<= : AssignmentPrecedence
infixoperator>>= : AssignmentPrecedence
infixoperator&=? : AssignmentPrecedence
infixoperator^=? : AssignmentPrecedence
infixoperator|=? : AssignmentPrecedence
// infix operator ?: : TernaryPrecedence
infixoperator||? : LogicalDisjunctionPrecedence
infixoperator&&? : LogicalConjunctionPrecedence
infixoperator<? : ComparisonPrecedence
infixoperator<=? : ComparisonPrecedence
infixoperator>? : ComparisonPrecedence
infixoperator>=? : ComparisonPrecedence
infixoperator==? : ComparisonPrecedence
infixoperator!=? : ComparisonPrecedence
infixoperator=== : ComparisonPrecedence
infixoperator!== : ComparisonPrecedence
infixoperator~=? : ComparisonPrecedence
infixoperator??? : NilCoalescingPrecedence
// infix operator as : CastingPrecedence
// infix operator as? : CastingPrecedence
// infix operator as! : CastingPrecedence
// infix operator is : CastingPrecedence
infixoperator..< : RangeFormationPrecedence
infixoperator... : RangeFormationPrecedence
infixoperator+? : AdditionPrecedence
infixoperator-? : AdditionPrecedence
infixoperator&+? : AdditionPrecedence
infixoperator&-? : AdditionPrecedence
infixoperator|? : AdditionPrecedence
infixoperator^? : AdditionPrecedence
infixoperator*? : MultiplicationPrecedence
infixoperator/? : MultiplicationPrecedence
infixoperator%? : MultiplicationPrecedence
infixoperator&*? : MultiplicationPrecedence
infixoperator&? : MultiplicationPrecedence
infixoperator<<? : BitwiseShiftPrecedence
infixoperator>>? : BitwiseShiftPrecedence