小编Jav*_*wag的帖子

创建一个扩展来从Swift中的Array过滤nils

我正在尝试编写一个Array的扩展,它允许将一个可选的T数组转换成一个非可选的T数组.

例如,这可以写成这样的自由函数:

func removeAllNils(array: [T?]) -> [T] {
    return array
        .filter({ $0 != nil })   // remove nils, still a [T?]
        .map({ $0! })            // convert each element from a T? to a T
}
Run Code Online (Sandbox Code Playgroud)

但是,我无法将其作为扩展工作.我试图告诉编译器扩展只适用于可选值的数组.这是我到目前为止:

extension Array {
    func filterNils<U, T: Optional<U>>() -> [U] {
        return filter({ $0 != nil }).map({ $0! })
    }
}
Run Code Online (Sandbox Code Playgroud)

(它不编译!)

arrays generics swift swift-extensions

46
推荐指数
6
解决办法
2万
查看次数

从辅助线程在主线程上运行代码?

这是一个普遍的Java问题,而不是Android首先关闭的问题!

我想知道如何在主线程上运行代码,从辅助线程的上下文.例如:

new Thread(new Runnable() {
        public void run() {
            //work out pi to 1,000 DP (takes a while!)

            //print the result on the main thread
        }
    }).start();
Run Code Online (Sandbox Code Playgroud)

那种事情 - 我意识到我的例子有点差,因为在Java中你不需要在主线程中打印出来的东西,并且Swing也有一个事件队列 - 但是你可能需要的一般情况在后台线程的上下文中,在主线程上运行说一个Runnable.

编辑:为了比较 - 这是我在Objective-C中如何做到这一点:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0UL), ^{
    //do background thread stuff

    dispatch_async(dispatch_get_main_queue(), ^{
        //update UI
    });
});
Run Code Online (Sandbox Code Playgroud)

提前致谢!

java concurrency multithreading synchronization

26
推荐指数
3
解决办法
3万
查看次数

用于XIB文件的iOS Localizable.strings文件?

我正在将iOS项目翻译成葡萄牙语,我已经创建了一个pt.lproj/Localizable.strings文件,并且我已经在源代码中添加了NSLocalizedString().一切正常!有一个小问题 - XIB文件中的字符串不会被翻译...我知道这是设计的.

我已经看到ibtool命令可用于从名为x的XIB文件中删除字符串并将其放入名为x.strings的文件中......但我的问题是,有没有办法从所有xib中提取字符串文件并将它们全部放入一个.strings文件中(例如Localizable.strings?或者甚至另一个名为XIBs.strings的文件会好吗?)

localization objective-c ipad localizable.strings ios

12
推荐指数
1
解决办法
6892
查看次数

Qt框架 - 我可以(合法地)使用qmake而不是Qt创建商业应用程序吗?

我知道使用Qt会在LGPL许可下吸引某些许可限制 - 即您必须提供源代码或至少提供目标文件,以便人们可以链接其他版本的Qt框架.我也知道您可以从Digia获得专有许可来克服这些限制 - 但我没有预算!

我的问题是 - 如果我只使用qmake和Qt Creator应用程序,但在我的应用程序中不包含任何Qt功能(因此没有任何链接到Qt的库),并且不使用MOC而没有使用资源编译的东西要么我能卖掉没有Qt商业许可证的应用程序(实际上,我只是使用qmake作为构建系统而Qt Creator作为IDE)?

c++ qt qmake qt-creator

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

QMake-如何在每次构建后添加构建后步骤

有点麻烦-我在qmake中添加了以下几行,以便将其复制到Mac上的应用程序捆绑包中。

mac {
    QMAKE_POST_LINK = $$PWD/package_mac.sh
}
Run Code Online (Sandbox Code Playgroud)

.sh文件有时会运行,并且似乎可以正常运行(目前,它只是运行touch geese,它会geese在build目录中创建一个命名文件(非常好!)。

但是,它不会在每次构建时都运行,它似乎仅在文件更改时运行。说真的,我想办法让QMAKE我所有的游戏资源拷贝过来到每个平台上的正确位置(以便在Windows,应用软件包在Mac上,等等build文件夹),一次我构建。

有任何想法吗?

c++ bash qmake build-script

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

Windows Phone 8中包含多个ItemTemplates的ListBox

我有一个ListBox,它是一个会话气泡列表(如消息传递应用程序),每个气泡可以来自用户或来自系统.因此,列表框中有两个DataTemplates,它们在资源中定义.如何有选择地将这些应用于ListBox?

我尝试过DataTemplateSelector(这是WP7的解决方案,但我找不到WP8中的类!),使用(WP8不支持DataType),最后是ItemTemplate属性的IValueConvertor - 一切都无济于事!

这样做的方法是什么?我想必须有一种方法,因为这是一个相当简单的要求?!

谢谢

c# xaml windows-phone-8

4
推荐指数
1
解决办法
8807
查看次数

MFMailComposeViewController和隐私 - 隐藏To:字段?

我正在创建我的第二个iPhone应用程序,并且我已经使用MFMailComposeViewController包含了一个反馈表单.这显示并正常工作,但我不确定我是否希望所有用户都能看到我的电子邮件地址.有没有办法将to:字段设置为我的电子邮件地址,然后隐藏它以便用户看不到它?

非常感谢,Javawag

iphone cocoa-touch objective-c

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

矢量擦除迭代器外范围

使用C++将我的游戏引擎中的一些代码从Mac移植到Windows,我得到了这个运行时错误:"矢量擦除外部范围".它适用于Mac!

void Entity::runDeferreds() {
    for (auto it = deferreds.begin(); it != deferreds.end(); /* nothing */ ) {
        if (it->Condition()) {
            it->Execution();

            it = deferreds.erase(it);
        } else {
            ++it;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将通过"延迟"任务列表进行迭代,这些任务存储在std::vector<DeferredCall>被调用的任务中deferreds.如果DeferredCall's' Condition()已经完成,那么它Execution()就会被运行,它应该被删除vector.但是,相反,我得到上述错误!

DeferredCall看起来像这样,而不是它太重要了:

struct DeferredCall {
    std::function<bool()> Condition;
    std::function<void()> Execution;
};
Run Code Online (Sandbox Code Playgroud)

救命?!

编辑: - 替代方法

我也试过这个,再次在Mac上工作:

deferreds.erase(std::remove_if(deferreds.begin(), deferreds.end(),
    [](DeferredCall &call) {
            if (call.Condition()) {
                call.Execution();
                return true;
            }

            return false;
        }
    ), deferreds.end());
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,我得到"矢量迭代器不兼容".

c++ vector msvc12

0
推荐指数
1
解决办法
1691
查看次数