小编mat*_*att的帖子

Android Studio如何为首选项屏幕验证XML?

我根据其他 SO答案在我的首选项屏幕的XML文件中有这个:

<PreferenceScreen
    android:title="@string/preference_title"
    android:summary="@string/preference_summary">
    <intent
        android:action="android.intent.action.VIEW"
        android:data="mailto:">
        <extra
            android:name="android.intent.extra.SUBJECT"
            android:value="@string/email_subject"/>
        <extra
            android:name="android.intent.extra.TEXT"
            android:value="@string/email_body"/>
    </intent>
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)

Android Studio将"额外"元素标记为"此处不允许".

我真的不明白它是如何验证XML的,因为没有实际的DTD.

"额外"似乎正常工作.或者,如果我想避免使用XML,我甚至可以使用Preference.OnPreferenceClickListener.我只是想知道(a)Android Studio如何验证它,以及(b)如果我使用一些不会总是有效的阴影黑客,包括额外的元素.

xml android android-studio

11
推荐指数
0
解决办法
900
查看次数

为什么这段代码具有很高的圈复杂度 - 或者它是 Jenkins 中 PHPMD 中的一个错误?

我试图了解圈复杂度的工作原理以及如何避免警告。是的,我明白编写代码的目的不是避免任意警告,但我至少想知道发生了什么,以便我可以决定我看到的代码是好还是坏。

我有一个看起来像的函数:

protected function update($uuid, $data, $householdUuid, $androidId) {
    $household = $this->householdService->getHouseholdByUuid($householdUuid);

    $this->updatePeriod($household, $data);
    $this->updateNickname($household, $data, $androidId);
    $this->updateDateOrder($household, $data);
    $this->updateCurrency($household, $data);
    $this->updateAccounts($household, $data);

    $household->save();
    return $this->respondUpdated();
}
Run Code Online (Sandbox Code Playgroud)

这被标记为具有 10 的圈复杂度。这怎么可能?从文档中,我将其视为 1。唯一的可能性是 PHPMD 正在下降到各种方法调用中。

但如果是这样,那么我就没有办法“修复”这个方法了。通常,我会通过提取较小的辅助方法来降低方法的复杂性。该方法已经被重构为各种 update() 方法,以消除发生的一堆条件更新。原始方法的圈复杂度也为 10,并且重构没有做任何事情。

或者问题可能更简单——我通过与 Jenkins 设置的持续集成来运行 PHPMD。PHPMD 没有使用最新的代码会不会有问题?在我已经将类重构到行数限制以下之后,我遇到了一些类似的问题,它会将类标记为行数过多。

php cyclomatic-complexity jenkins phpmd

5
推荐指数
1
解决办法
5572
查看次数

部分在 Objective C 中、部分在 Swift 中实现协议

我可以部分用 Objective C 部分用 Swift 实现协议吗?

我有一个现有的 Objective C 类,它在 .h 文件中声明如下。

@interface SetupViewController : UIViewController <UITableViewDataSource> {
    // etc.
}
Run Code Online (Sandbox Code Playgroud)

相应的.m文件实现了UITableViewDataSource协议。现在我想在 Swift 扩展中重写其中一些方法。但我希望现在不必用 Swift 重写所有这些。(这只是一个示例片段,实际的课程要长得多。)

@implementation SetupViewController

// I want to rewrite this method in Swift
/*
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 2; 
}
*/

// I don't want to rewrite this method in Swift yet
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {    
    // lots of code
}
Run Code Online (Sandbox Code Playgroud)

因此,我将其中一种方法从 Objective C 文件移至我的扩展中,如下所示:

@objc extension SetupViewController {
    public func tableView(_ …
Run Code Online (Sandbox Code Playgroud)

objective-c ios swift

5
推荐指数
1
解决办法
340
查看次数