GKRule

来源:互联网 发布:淘宝店标在线制作免费 编辑:程序博客网 时间:2024/06/05 10:21

GKRule

规则系统中的上下文,要测试的谓词和当测试成功时要执行的动作。

概括

评估GKRuleSystem对象并对其每个规则进行测试,其通常检查与规则系统相关联的状态或事实,并执行由测试通过的每个规则指定的操作,例如在规则系统中断言或撤回事实或修改其状态。

规则有两个部分:谓词和动作。

• 规则的谓词判断规则系统的上下文是否满足了规则要求。评估规则的谓词通常包括检查规则系统状态字典中的信息或测试系统声明的事实的成员等级(有关详细信息,请参阅GKRuleSystem中的facts属性)。

当且仅当满足规则的谓词时才会执行规则的动作。 规则操作通常涉及断言或撤回系统中的事实(请参阅“断言和收回事实”中列出的方法)或修改系统状态字典中的信息。

有多种方法来创建在规则系统中使用的规则,每种方法都有自己的优势。
典型的规则谓词涉及对包含规则系统的属性的条件逻辑测试,典型的规则行为断言或撤回事实。如果你的规则适合此模式,则可以使用ruleWithPredicate:assertingFact:grade: 和 ruleWithPredicate:retractingFact:grade:方法来创建完全数据驱动的规则,也就是说,它们可以轻松存档以供以后重用,编辑而不进行编译源代码,并在运行时创建。

要为谓词和动作创建具有完全自定义逻辑的规则,请使用ruleWithBlockPredicate:action: 方法。该方法创建非常灵活的规则,但不能归档以供重用。

要创建具有更复杂的自定义逻辑的规则,请实现你自己的规则类:GKRule的子类为规则的谓词及其操作构建自定义逻辑,或用GKNSPredicateRule子类通过NSPredicate用于规则的谓词,然后仅为规则的行为创建自定义逻辑。自定义规则类的可重用性取决于你对这些类的实现。

子类注释(Subclassing Notes)

GameplayKit在GKRuleSystem对象的上下文中评估规则,因此自定义规则类应该是有效的,也就是说,它们通常不应该承担影响其谓词或动作的独立状态。

覆盖方法(Methods to Override)

GKRule的子类必须实现以下两种方法:
覆盖evaluatePredicateWithSystem: 方法以在提供的规则系统的上下文中评估您的规则。

覆盖performActionWithSystem: 方法来执行当你的规则满足时(即在你的evaluatePredicateWithSystem: 方法实现返回YES)时,在提供的规则系统的上下文中应该执行的任何操作。

子类化替代方法(Alternatives to Subclassing)

使用ruleWithPredicate:assertingFact:grade: 或ruleWithPredicate:retractingFact:grade: 方法创建一个使用NSPredicate对象进行评估的规则,并且其操作在包含规则系统中断言或撤回事实。

子类GKNSPredicateRule代替使用NSPredicate对象来评估规则,并仅为规则的操作写入自定义逻辑。

使用ruleWithBlockPredicate:action: 方法可以快速创建自定义逻辑包含在块对象中的规则。

Topics

创建数据驱动规则(Creating Data-Driven Rules)

+ ruleWithPredicate:assertingFact:grade:

使用指定的谓词创建一个数据驱动的规则,其操作在规则系统中确定一个事实来评估规则。

+ ruleWithPredicate:retractingFact:grade:

使用指定的谓词创建一个数据驱动规则,该规则的操作会在规则系统中缩减评估规则的事实。

创建基于块的规则(Creating Block-Based Rules)

+ ruleWithBlockPredicate:action:

创建一个规则,其谓词被评估,并通过指定的块执行操作。

在规则系统中设定规则的顺序(Setting the Order of Rules in a Rule System)

salience

规则相对于规则系统中其他项的重要性。

评估规则(Evaluating a Rule)

- evaluatePredicateWithSystem:

返回一个布尔值,指示规则是否在指定的规则系统的上下文中得到满足。

- performActionWithSystem:

执行在指定规则系统的上下文中满足规则时应导致的操作。

关系

继承

NSObject



原创粉丝点击