是否有一种简单的方法可以使用列表推导来展平迭代列表,或者失败,你会认为什么是平衡这样的浅层列表,平衡性能和可读性的最佳方法?
我尝试使用嵌套列表理解来压缩这样的列表,如下所示:
[image for image in menuitem for menuitem in list_of_menuitems]
Run Code Online (Sandbox Code Playgroud)
但我在NameError
那里遇到麻烦,因为name 'menuitem' is not defined
.谷歌搜索并浏览Stack Overflow后,我得到了一个reduce
声明所需的结果:
reduce(list.__add__, map(lambda x: list(x), list_of_menuitems))
Run Code Online (Sandbox Code Playgroud)
但是这个方法相当难以理解,因为我需要那个list(x)
调用,因为x是一个Django QuerySet
对象.
结论:
感谢所有为此问题做出贡献的人.以下是我学到的内容摘要.我也将其作为社区维基,以防其他人想要添加或更正这些观察结果.
我原来的reduce语句是多余的,用这种方式编写得更好:
>>> reduce(list.__add__, (list(mi) for mi in list_of_menuitems))
Run Code Online (Sandbox Code Playgroud)
这是嵌套列表理解的正确语法(Brilliant summary dF!):
>>> [image for mi in list_of_menuitems for image in mi]
Run Code Online (Sandbox Code Playgroud)
但这些方法都不如使用效率高itertools.chain
:
>>> from itertools import chain
>>> list(chain(*list_of_menuitems))
Run Code Online (Sandbox Code Playgroud)
正如@cdleary指出的那样,通过使用chain.from_iterable
如下所示来避免*操作符魔术可能是更好的风格:
>>> chain = itertools.chain.from_iterable([[1,2],[3],[5,89],[],[6]])
>>> print(list(chain))
>>> [1, 2, …
Run Code Online (Sandbox Code Playgroud) 我正在进行国际化iPhone应用程序的过程 - 我需要根据用户当前的语言环境对某些视图进行编程更改.我疯了,因为无论iPhone模拟器或实际硬件上的语言偏好如何,locale
总是评估为"en_US":
NSString *locale = [[NSLocale currentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
Run Code Online (Sandbox Code Playgroud)
疯狂的是,应用程序的其余部分按预期运行.从Localization.strings文件中选择正确的字符串并在界面中使用,并使用所选语言环境的正确.xib文件.
我也试过以下,但没有用,结果相同:
NSString *locale = [[NSLocale autoupdatingCurrentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
Run Code Online (Sandbox Code Playgroud)
我有什么简单的东西吗?可能是偏好还是导入?
我以前做的:
正如Darren的回答所暗示的那样,我正在寻找的偏好不在NSLocale
,而是在这里:
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* languages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* preferredLanguage = [languages objectAtIndex:0];
NSLog(@"preferredLanguage: %@", preferredLang);
Run Code Online (Sandbox Code Playgroud)
彼得的答案似乎是一个更好的解决方案:
NSArray* preferredLanguages = [NSLocale preferredLanguages];
NSLog(@"preferredLanguages: %@", preferredLanguages);
Run Code Online (Sandbox Code Playgroud) 谷歌的自定义iOS应用程序Gboard具有一项有趣的功能,无法使用iOS SDK中的公共API实现(从iOS 10开始). 我想确切地知道Google如何完成以编程方式弹出Gboard中App Switching堆栈中的一个应用程序的任务.
自定义iOS键盘有两个主要组件:容器应用程序和键盘应用程序扩展.键盘应用程序扩展程序在单独的操作系统进程中运行,只要用户在手机上需要文本输入的任何应用程序中,该进程就会启动.
这些是使用Gboard可以遵循的近似步骤,以查看以编程方式返回到以前的应用程序的效果:
我假设Google使用私有API,通过使用Objective-C运行时内省探索状态栏的视图层次结构,并以某种方式合成tap事件或调用公开的目标/操作.我已经很好地探索了这个,并且能够在状态栏中找到有趣的UIView子类,比如UIStatusBarBreadcrumbItemView,它包含一个UISystemNavigationAction数组.我正在继续探索这些类,希望我能找到一些复制用户交互的方法.
我知道使用私有API是一种很好的方式来让您的应用程序提交从App Store中被拒绝 - 这不是我想在答案中解决的问题.我主要想找到关于Google如何完成以编程方式弹出Gboard中应用程序切换堆栈中的一个应用程序的具体任务的具体答案.
有没有办法在.swift文件中声明一个函数(编译成.swiftmodule),如下所示:
hello.swift
func hello_world() {
println("hello world")
}
Run Code Online (Sandbox Code Playgroud)
main.swift
import hello
hello.hello_world()
Run Code Online (Sandbox Code Playgroud)
我还用这两个文件和一个带有编译/链接命令的Makefile做了一个git repo.目前我可以让main.swift导入hello,但它目前无法链接...是否有另一个链接器标志我可以通过?目前Makefile是:
PWD=$(shell pwd)
APP_NAME=main
MODULE_NAME=hello
SWIFT_MODULE_PATH=$(PWD)/$(MODULE_NAME).swiftmodule
SDK=/Applications/Xcode6-Beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk
main : clean
xcrun swift $(MODULE_NAME).swift -emit-module -v
xcrun swift $(APP_NAME).swift \
-o $(APP_NAME) \
-sdk $(SDK) \
-I $(PWD) \
-Xlinker -sectalign \
-Xlinker __SWIFT \
-Xlinker __ast \
-Xlinker 4 \
-Xlinker -sectcreate \
-Xlinker __SWIFT \
-Xlinker __ast \
-Xlinker $(SWIFT_MODULE_PATH) \
-v
Run Code Online (Sandbox Code Playgroud) 今天我需要从一堆字符串中删除中文,并且正在寻找一个简单的Python正则表达式.有什么建议?
在ARC
,我有一个对象,Child
有一个weak
属性,parent
.我正在尝试编写一些测试Child
,并且我正在parent
使用它来嘲弄它的属性OCMock
.
在ARC下,NSProxy
使用合成的弱属性设置器设置子类不会设置属性...设置弱属性后的行,检查它显示它已经存在nil
.这是具体的例子:
@interface Child : NSObject
@property (nonatomic, weak) id <ParentInterface>parent;
@end
@implementation Child
@synthesize parent = parent_;
@end
// ... later, inside a test class ...
- (void)testParentExists
{
// `mockForProtocol` returns an `NSProxy` subclass
//
OCMockObject *aParent = [OCMockObject mockForProtocol:@protocol(ParentInterface)];
assertThat(aParent, notNilValue());
// `Child` is the class under test
//
Child *child = [[Child alloc] init];
assertThat(child, notNilValue());
assertThat(child.parent, nilValue()); …
Run Code Online (Sandbox Code Playgroud) unit-testing objective-c ocmock nsproxy automatic-ref-counting
比方说,我有一个NSArray
的NSDictionaries
是10个元素长.我想NSArray
用每个字典上的单个键的值创建第二个.我能想到的最好方法是:
NSMutableArray *nameArray = [[NSMutableArray alloc] initWithCapacity:[array count]];
for (NSDictionary *p in array) {
[nameArray addObject:[p objectForKey:@"name"]];
}
self.my_new_array = array;
[array release];
[nameArray release];
}
Run Code Online (Sandbox Code Playgroud)
但理论上,我应该能够避免使用可变数组并使用计数器[nameArray addObjectAtIndex:count]
,因为新列表应该与旧列表完全一样长.请注意,我不是要尝试过滤原始数组的子集,而是创建一个具有完全相同数量的元素的新数组,只需要从数组中每个元素的某个任意属性中挖掘出来的值.
在python中,可以像这样解决这个问题:
new_list = [p['name'] for p in old_list]
Run Code Online (Sandbox Code Playgroud)
或者如果你是一个受虐狂,像这样:
new_list = map(lambda p: p['name'], old_list)
Run Code Online (Sandbox Code Playgroud)
在objective-c中必须稍微明确一点,这让我想知道是否有一种公认的处理这些情况的常用方法.
Apple的企业部署指南说,内部分发给组织的应用程序可以附带一个"配置文件",它可以更改某些系统设置(如VPN或wifi首选项).是否可以使用相同的系统为企业应用程序本身分发自定义设置(如系统范围的"设置"应用程序中所定义)?
我正在MyLibrary
为 Objective-C 中的 iOS构建一个静态库,它将十几个有用的类捆绑在一起,每个类都有自己的 .h 文件。我想MyLibrary
作为单个编译的二进制libMyLibrary.a
文件 和单个 .h 头文件分发MyLibraryAPI.h
。 MyLibraryAPI.h
有十几个#import
语句,每个MyLibrary
公共类都有一个。希望包含MyLibrary
在其宿主项目中的开发人员只需包含libMyLibrary.a
二进制文件和MyLibraryAPI.h
标题。这就是目标。
因此,我已将Xcode 项目Role
中每个公共类的设置MyLibrary
为Public
并libMyLibrary.a
使用 Xcode 命令行构建工具和lipo
. 然后,我手动将所有十几MyLibrary
个头文件包含libMyLibrary.a
在一个宿主项目中,宿主项目可以MyLibrary
毫无问题地使用公共类。惊人的!
问题是,如果我删除那些十几头文件和使用MyLibraryAPI.h
,而不是(这是我的目标),主体项目的类不能再找到MyLibrary
中引用的头文件MyLibraryAPI.h
。相反,在编译时,我收到如下错误:MyAwesomeThingDelegate.h: No such file or directory...
对于MyLibrary
我尝试#import
在MyLibraryAPI.h
. 我在我的宿主项目根目录中有一个文件夹,lib
在宿主项目构建设置中将递归头搜索路径设置为lib/**
和在库搜索路径中,将递归路径设置为lib/**
.
我很想听听社区关于如何正确设置宿主项目的搜索路径的建议,以便我只需要包含libMyLibrary.a
和 …
我下载了iPhone SDK的预发布版本,并尝试使用我用它构建的二进制文件更新我现有的一个应用程序.显然你不应该这样做但我在安装预发布SDK时忘记了警告.无论如何 - 我有两个问题:
我可以在构建设置中将基本SDK设置为早期版本并解决此问题吗?
如果没有,那我该怎么办?
我试图从python背景教自己C. 我目前的小问题是尝试对数组长度等内容进行较少的硬编码,并根据输入动态分配内存.
我写了以下程序.我希望社区的建议可以通过以下方式进行修改:
1.)Make first
和last
Name
elements可变长度.目前他们的长度是硬编码的MAX_NAME_LENGTH
.这将涉及两个变化Name
小号struct
声明,以及我在它的元素分配值的方式.
2.)Bonus:找出一些方法逐步向name_list
数组中添加新元素,而不必事先确定其长度.基本上使它成为可扩展的列表.
/* namelist.c
Loads up a list of names from a file to then do something with them.
*/
#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
#define DATAFILE "name_list.txt"
#define DATAFILE_FORMAT "%[^,]%*c%[^\n]%*c"
#define MAX_NAME_LENGTH 100
typedef struct {
char first[MAX_NAME_LENGTH];
char last[MAX_NAME_LENGTH];
} Name;
int main() {
FILE *fp = fopen(DATAFILE, "r");
// Get the number of names in DATAFILE at runtime.
Name aName; …
Run Code Online (Sandbox Code Playgroud) 我正在制作一个customKeyboard,它具有删除按钮,用于删除文本和代码,即:
func addDelete() {
deleteButton = UIButton.buttonWithType(.System) as UIButton
deleteButton.setTitle(" Delete ", forState: .Normal)
deleteButton.sizeToFit()
deleteButton.setTranslatesAutoresizingMaskIntoConstraints(false)
deleteButton.addTarget(self, action: "didTapDelete", forControlEvents: .TouchUpInside)
deleteButton.layer.cornerRadius = 5
view.addSubview(deleteButton)
var rightSideConstraint = NSLayoutConstraint(item: deleteButton, attribute: .Right, relatedBy: .Equal, toItem: view, attribute: .Right, multiplier: 1.0, constant: -10.0)
var topConstraint = NSLayoutConstraint(item: deleteButton, attribute: .Top, relatedBy: .Equal, toItem: view, attribute: .Top, multiplier: 1.0, constant: +10.0)
view.addConstraints([rightSideConstraint, topConstraint])
}
func didTapDelete() {
var proxy = textDocumentProxy as UITextDocumentProxy
proxy.deleteBackward()
}
Run Code Online (Sandbox Code Playgroud)
但这很慢,因为我必须单击很多次才能从中删除很多字符textField
。
有没有什么方法可以创建一个可以连续按下的按钮,它可以像默认的iPhone keyBoard backSpace按钮一样快地删除字符?
我正在构建一个carArray
并希望有条件地过滤内容,使用NSPredicate
如下:
NSPredicate *pred;
switch (carType) {
case FreeCar:
pred = [NSPredicate predicateWithFormat:@"premium = NO"];
break;
case PremiumCar:
pred = [NSPredicate predicateWithFormat:@"premium = YES"];
break;
default:
pred = [NSPredicate predicateWithFormat:@"SOME PREDICATE THAT RETURNS EVERYTHING"];
break;
}
self.carArray = [aCarArrayIGotFromSomewhere filteredArrayUsingPredicate:pred];
Run Code Online (Sandbox Code Playgroud)
我的问题是,我存在的值的正确语法是什么,SOME PREDICATE THAT RETURNS EVERYTHING
它返回数组/集中的所有实例?
ios ×4
iphone ×4
objective-c ×4
cocoa ×3
cocoa-touch ×2
python ×2
swift ×2
xcode ×2
arrays ×1
backspace ×1
c ×1
cjk ×1
distribution ×1
dynamic ×1
enterprise ×1
header ×1
linker ×1
malloc ×1
nsproxy ×1
ocmock ×1
regex ×1
struct ×1
unit-testing ×1