小编Pra*_*ogg的帖子

在Python中展平浅层列表

是否有一种简单的方法可以使用列表推导来展平迭代列表,或者失败,你会认为什么是平衡这样的浅层列表,平衡性能和可读性的最佳方法?

我尝试使用嵌套列表理解来压缩这样的列表,如下所示:

[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)

python list-comprehension

382
推荐指数
10
解决办法
17万
查看次数

NSLocale currentLocale始终返回"en_US"而不是用户的当前语言

我正在进行国际化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)

iphone cocoa objective-c internationalization

79
推荐指数
4
解决办法
6万
查看次数

Google的自定义iOS键盘Gboard如何以编程方式解散最前端的应用程序?

谷歌的自定义iOS应用程序Gboard具有一项有趣的功能,无法使用iOS SDK中的公共API实现(从iOS 10开始). 我想确切地知道Google如何完成以编程方式弹出Gboard中App Switching堆栈中的一个应用程序的任务.

自定义iOS键盘有两个主要组件:容器应用程序和键盘应用程序扩展.键盘应用程序扩展程序在单独的操作系统进程中运行,只要用户在手机上需要文本输入的任何应用程序中,该进程就会启动.

这些是使用Gboard可以遵循的近似步骤,以查看以编程方式返回到以前的应用程序的效果:

  1. 用户在iPhone上启动Apple Messages应用程序并点击文本字段以开始输入文本.
  2. Gboard键盘扩展程序已启动,用户可以看到Gboard自定义键盘(当他们仍在Apple Messages应用程序中时).
  3. 用户点击Gboard键盘扩展内的麦克风键进行语音到文本输入.
  4. Gboard使用自定义URL方案来启动Gboard容器应用程序.Gboard键盘和Apple消息应用程序在App堆栈中向下推送一层,而Gboard容器应用程序现在是App堆栈中最前面的应用程序.Gboard容器应用程序使用麦克风收听用户的语音并将其转换为放置在屏幕上的文本.
  5. 当用户对他们在屏幕上看到的文本输入感到满意时,用户点击"完成"按钮.
  6. 这就是魔术发生的地方......当文本输入屏幕被取消时,Gboard容器应用程序也会自动被解雇.Gboard容器应用程序消失并被Apple Messages应用程序取代(有时Gboard键盘扩展程序仍处于活动状态,有时会重新启动,有时需要通过点击文本字段手动重新启动.).Google如何实现这一目标?
  7. 最后,用户在文本输入字段中看到刚刚翻译的文本自动插入.据推测,谷歌通过在Gboard容器应用和键盘扩展之间共享数据来实现这一目标.

我假设Google使用私有API,通过使用Objective-C运行时内省探索状态栏的视图层次结构,并以某种方式合成tap事件或调用公开的目标/操作.我已经很好地探索了这个,并且能够在状态栏中找到有趣的UIView子类,比如UIStatusBarBreadcrumbItemView,它包含一个UISystemNavigationAction数组.我正在继续探索这些类,希望我能找到一些复制用户交互的方法.

我知道使用私有API是一种很好的方式来让您的应用程序提交从App Store中被拒绝 - 这不是我想在答案中解决的问题.我主要想找到关于Google如何完成以编程方式弹出Gboard中应用程序切换堆栈中的一个应用程序的具体任务的具体答案.

ios ios-keyboard-extension

39
推荐指数
2
解决办法
2031
查看次数

如何将已编译的.swiftmodule中声明的swift函数导入另一个swift文件?

有没有办法在.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)

swift

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

使用Python和Regex查找字符串中的所有中文文本

今天我需要从一堆字符串中删除中文,并且正在寻找一个简单的Python正则表达式.有什么建议?

python regex cjk

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

如何让ARC下的OCMock停止使用弱属性来设置NSProxy子类?

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

10
推荐指数
2
解决办法
1962
查看次数

从现有NSArray创建新NSArray的标准惯例是什么?

比方说,我有一个NSArrayNSDictionaries是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中必须稍微明确一点,这让我想知道是否有一种公认的处理这些情况的常用方法.

xcode cocoa cocoa-touch objective-c ios

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

可以通过Enterprise Distribution配置iOS App的系统设置吗?

Apple的企业部署指南说,内部分发给组织的应用程序可以附带一个"配置文件",它可以更改某些系统设置(如VPN或wifi首选项).是否可以使用相同的系统为企业应用程序本身分发自定义设置(如系统范围的"设置"应用程序中所定义)?

iphone enterprise distribution ios

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

如何构建一个 Objective-C 静态库以作为单个二进制文件和头文件分发?

我正在MyLibrary为 Objective-C 中的 iOS构建一个静态库,它将十几个有用的类捆绑在一起,每个类都有自己的 .h 文件。我想MyLibrary作为单个编译的二进制libMyLibrary.a文件 和单个 .h 头文件分发MyLibraryAPI.hMyLibraryAPI.h有十几个#import语句,每个MyLibrary公共类都有一个。希望包含MyLibrary在其宿主项目中的开发人员只需包含libMyLibrary.a二进制文件和MyLibraryAPI.h标题。这就是目标。

因此,我已将Xcode 项目Role中每个公共类的设置MyLibraryPubliclibMyLibrary.a使用 Xcode 命令行构建工具和lipo. 然后,我手动将所有十几MyLibrary个头文件包含libMyLibrary.a在一个宿主项目中,宿主项目可以MyLibrary毫无问题地使用公共类。惊人的!

问题是,如果我删除那些十几头文件和使用MyLibraryAPI.h,而不是(这是我的目标),主体项目的类不能再找到MyLibrary中引用的头文件MyLibraryAPI.h。相反,在编译时,我收到如下错误:MyAwesomeThingDelegate.h: No such file or directory...对于MyLibrary我尝试#importMyLibraryAPI.h. 我在我的宿主项目根目录中有一个文件夹,lib在宿主项目构建设置中将递归头搜索路径设置为lib/**和在库搜索路径中,将递归路径设置为lib/**.

我很想听听社区关于如何正确设置宿主项目的搜索路径的建议,以便我只需要包含libMyLibrary.a和 …

linker header objective-c static-libraries ios

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

iTunes Connect拒绝我的二进制文件,因为我使用了SDK的预发布版本,我该怎么办?

我下载了iPhone SDK的预发布版本,并尝试使用我用它构建的二进制文件更新我现有的一个应用程序.显然你不应该这样做但我在安装预发布SDK时忘记了警告.无论如何 - 我有两个问题:

  1. 我可以在构建设置中将基本SDK设置为早期版本并解决此问题吗?

  2. 如果没有,那我该怎么办?

iphone xcode itunesconnect

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

如何在C中动态分配内存并确定数组大小?

我试图从python背景教自己C. 我目前的小问题是尝试对数组长度等内容进行较少的硬编码,并根据输入动态分配内存.

我写了以下程序.我希望社区的建议可以通过以下方式进行修改:

1.)Make firstlast Nameelements可变长度.目前他们的长度是硬编码的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)

c arrays malloc struct dynamic

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

进行自定义iOS键盘扩展时,如何创建具有与Apple原始退格键相同功能的按钮?

我正在制作一个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按钮一样快地删除字符?

backspace swift custom-keyboard

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

如何使用NSPredicate返回整个集/数组?

我正在构建一个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它返回数组/集中的所有实例?

iphone cocoa cocoa-touch

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