我正在尝试编写一个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)
(它不编译!)
这是一个普遍的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)
提前致谢!
我正在将iOS项目翻译成葡萄牙语,我已经创建了一个pt.lproj/Localizable.strings文件,并且我已经在源代码中添加了NSLocalizedString().一切正常!有一个小问题 - XIB文件中的字符串不会被翻译...我知道这是设计的.
我已经看到ibtool命令可用于从名为x的XIB文件中删除字符串并将其放入名为x.strings的文件中......但我的问题是,有没有办法从所有xib中提取字符串文件并将它们全部放入一个.strings文件中(例如Localizable.strings?或者甚至另一个名为XIBs.strings的文件会好吗?)
我知道使用Qt会在LGPL许可下吸引某些许可限制 - 即您必须提供源代码或至少提供目标文件,以便人们可以链接其他版本的Qt框架.我也知道您可以从Digia获得专有许可来克服这些限制 - 但我没有预算!
我的问题是 - 如果我只使用qmake和Qt Creator应用程序,但在我的应用程序中不包含任何Qt功能(因此没有任何链接到Qt的库),并且不使用MOC而没有使用资源编译的东西要么我能卖掉没有Qt商业许可证的应用程序(实际上,我只是使用qmake作为构建系统而Qt Creator作为IDE)?
有点麻烦-我在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文件夹),每一次我构建。
有任何想法吗?
我有一个ListBox,它是一个会话气泡列表(如消息传递应用程序),每个气泡可以来自用户或来自系统.因此,列表框中有两个DataTemplates,它们在资源中定义.如何有选择地将这些应用于ListBox?
我尝试过DataTemplateSelector(这是WP7的解决方案,但我找不到WP8中的类!),使用(WP8不支持DataType),最后是ItemTemplate属性的IValueConvertor - 一切都无济于事!
这样做的方法是什么?我想必须有一种方法,因为这是一个相当简单的要求?!
谢谢
我正在创建我的第二个iPhone应用程序,并且我已经使用MFMailComposeViewController包含了一个反馈表单.这显示并正常工作,但我不确定我是否希望所有用户都能看到我的电子邮件地址.有没有办法将to:字段设置为我的电子邮件地址,然后隐藏它以便用户看不到它?
非常感谢,Javawag
使用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++ ×3
objective-c ×2
qmake ×2
arrays ×1
bash ×1
build-script ×1
c# ×1
cocoa-touch ×1
concurrency ×1
generics ×1
ios ×1
ipad ×1
iphone ×1
java ×1
localization ×1
msvc12 ×1
qt ×1
qt-creator ×1
swift ×1
vector ×1
xaml ×1