小编Cra*_*tis的帖子

AnyObject的返回值如何!与AnyObject不同

NSMetadataItemSwift下的Cocoa框架中的类包含以下函数:

func valueForAttribute(key: String!) -> AnyObject!

我还在学习强制解包和可选链接之间的区别(和细节).在上面的函数中,这是否意味着:

  1. key参数必须有一个值,

  2. 返回值保证有值吗?

我主要关注的是返回值后面的感叹号 - 一旦我分配了返回值:

var isDownloadedVal = item.valueForAttribute(NSMetadataUbiquitousItemIsDownloadedKey)
Run Code Online (Sandbox Code Playgroud)

if let在检查时是否需要包含一个块,或者我保证它具有我可以安全检查的值吗?

swift forced-unwrapping

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

尝试在Swift中使用`min()`函数的编译错误

我正在尝试为Swift Int类型编写一个扩展来保存嵌套min()/max()函数.它看起来像这样:

extension Int {
    func bound(minVal: Int, maxVal: Int) -> Int {
        let highBounded = min(self, maxVal)
        return max(minVal, highBounded)
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在分配/计算时出现编译错误highBounded:

IntExtensions.swift:13:25: 'Int' does not have a member named 'min'

为什么标准库定义的函数没有正确定位?

在此输入图像描述

swift

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

使用主/详细配置禁用/更改iPad上"从左侧滑动"的行为

我的iPad应用程序中有一个主/细节分割视图配置.如果我从左侧滑动(或者实际上,只是在详细视图中向右滑动,无论我是否从屏幕的左边缘开始),它都会滑动打开主视图.

这里的问题是我的详细视图是一个MKMapView,所以如果我把手指放在地图上并向右移动手指(向左平移),主视图就会打开!我必须开始向另一个方向拖动我的手指,然后向右走,正确平移.

这种行为可以改变:

  1. 因此它被完全禁用(仅允许从后退按钮打开主视图)

  2. 因此,它仅影响详细视图中不在地图上的滑动

  3. 因此,只有在滑动从屏幕边缘开始时才触发

谢谢!

cocoa-touch ipad ios

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

Objective-C中的空对象模式

在Java中,编写以下设计非常容易:

public abstract class Pizza {
    public static final Pizza.NULL = new Pizza() {
        /* "null" implementations */
    }

    /* actual/abstract implmentations */
}
Run Code Online (Sandbox Code Playgroud)

在Objective-C中获得相同效率场景的首选方法是什么?我一直无法找到关于这个主题的任何文档,我尝试了几个不同的场景static const,#define等等,但它们似乎都没有像上面的Java方法那样成功.

我想避免编写一个具有静态方法来获取单例实例的具体NullPizza类,因为它似乎更适合它作为最高级别接口的最终属性/字段.(披萨,在这种情况下.)

编辑:虽然我理解如何处理NULL模式由于Obj-C处理'nil'方法调用的独特方法,那么其他静态公共实例如Response.YES和Response.NO呢?(请参阅评论以供讨论.)

oop null design-patterns objective-c

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

从进程'stdout读取时,NSTask需要刷新,而终端则不需要

我有一个简单的Python脚本,询问你的名字,然后吐出来:

def main():
    print('Enter your name: ')
    for line in sys.stdin:
        print 'You entered: ' + line
Run Code Online (Sandbox Code Playgroud)

非常简单的东西!在OS X终端中运行时,它运行良好:

$ python nameTest.py 
Enter your name: 
Craig^D
You entered: Craig
Run Code Online (Sandbox Code Playgroud)

但是,当尝试通过a运行此过程时NSTask,只有在Python脚本中添加了额外的flush()调用时才会出现stdout.

这就是我NSTask配置和配管的方式:

NSTask *_currentTask = [[NSTask alloc] init];
_currentTask.launchPath = @"/usr/bin/python";
_currentTask.arguments = [NSArray arrayWithObject:@"nameTest.py"];

NSPipe *pipe = [[NSPipe alloc] init];
_currentTask.standardOutput = pipe;
_currentTask.standardError = pipe;

dispatch_queue_t stdout_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);

__block dispatch_block_t checkBlock;

checkBlock = ^{
    NSData *readData = [[pipe fileHandleForReading] availableData];
    NSString *consoleOutput …
Run Code Online (Sandbox Code Playgroud)

python stdout pipe objective-c nstask

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

无法加载Swift运行时库(未找到图像)

我更新了我的一个核心框架,以使用Swift作为实验.它构建良好,兼容性头具有可用于依赖于它们的Objective-C类的Swift类,并且一切编译都很好.

但是,在启动应用程序(基本SDK和部署目标OS X 10.10)时,它会立即崩溃:

dyld: Library not loaded: @rpath/libswift_stdlib_core.dylib
  Referenced from: /Users/Craig/Library/Developer/Xcode/DerivedData/MacApp-dxcgahgplwpbjedqnembegifbowj/Build/Products/Debug/Fluffy.framework/Versions/A/Fluffy
  Reason: image not found
Run Code Online (Sandbox Code Playgroud)

请注意,这MacApp是我正在启动的应用程序,它使用Fluffy包含Swift代码的框架.

Fluffy项目的目标Runpath Search Paths是:

@executable_path/Frameworks

但我也尝试过空白.我试过重启Xcode,但无济于事.使用Yosemite 14A298i和Xcode beta 4.

macos xcode swift osx-yosemite

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

如何使用流操作来计算列表中的平均值,省略一些?

我有一个方法,它返回一个属性的平均值超过许多模型对象:

List<Activity> activities = ...;
double effortSum = 0;
double effortCount = 0;
activities.stream().forEach(a -> {
    double effort = a.getEffort();
    if (effort != Activity.NULL) {
        effortCount++;            < Compilation error, local variable
        effortSum += effort;      < Compilation error, local variable
    }
});
Run Code Online (Sandbox Code Playgroud)

但是,如上所述,上述尝试无法编译.我遇到的唯一解决方案是使用AtomicReference一个Double对象,但这看起来很苛刻,并且会给应该是一个简单的操作带来大量的混淆.(或者加入番石榴并获得AtomicDouble,但是得出了同样的结论.)

是否有使用新Java 8循环修改局部变量的"最佳实践"策略?

活动的相关代码:

public class Activity {
    public static final double NULL = Double.MIN_VALUE;

    private double effort = NULL;

    public void setEffort(double effort) { this.effort = effort; }
    public double …
Run Code Online (Sandbox Code Playgroud)

java foreach java-8

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

使用Spring 3.1.x和MockMvc模拟/自动装配bean

我正在使用Spring 3.1.4,并尝试使用MockMvc围绕我们的身份验证编写一些集成测试.

我遇到的一个根本问题是,因为我没有使用Spring 3.2,所以我不能在我的测试中@Autowire使用WebApplicationContext对象,因此无法使用MockMvcBuilders.webApplicationContextSetup(),所以我正在使用它xmlConfigSetup.

我似乎已经遇到了多条叉子的路径,这两条叉子都没有解决我的所有问题.

我有这样的配置:

@ContextConfiguration(locations = {
        "classpath:/test-applicationContext.security.xml",
        "classpath:/test-mvc-dispatcher-servlet.xml"
})
@RunWith(SpringJUnit4ClassRunner.class)
public class SecurityTests extends AbstractJUnit4SpringContextTests {

    public static final String[] CONTEXT_CONFIG = {
            "classpath:/test-applicationContext.security.xml", "classpath:/test-mvc-dispatcher-servlet.xml"
    };

    @Autowired
    private Filter springSecurityFilterChain;

    @Before
    public void setUp() {
        ContextMockMvcBuilder xmlConfigSetup = MockMvcBuilders.xmlConfigSetup(CONTEXT_CONFIG);
        this.mockMvc = xmlConfigSetup.addFilters(springSecurityFilterChain).build();
    }
Run Code Online (Sandbox Code Playgroud)

这里的优点是我springSecurityFilterChain@Autowired,易于提供addFilters().的缺点是,任何其他自动装配豆是不同的情况下比我MockMvc配置的,因为我基本上是建设我servlet上下文的两倍.这意味着如果我UserDetailsService在集成测试中自动调整并调整它(添加用户"bob"),则MockMvc实例没有它.

选项1:使用上面的配置,我可以访问MockMvc实例中的任何bean吗?我还没有找到一种方法,这使得任何集成测试都无法"准备".

选项2:删除@ContextConfiguration并让MockMvc驱动测试.这看起来更干净,但我无法弄清楚如何创建/注入Spring Security过滤器链 - 因为它不再是自动装配的.(我的bean都没有 - …

java spring mocking spring-mvc spring-security

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

在Swift对象数组中收集多个唯一属性值

说我有一个简单的Ingredient类:

class Ingredient {
    let section : String // 'Produce', 'Spices', 'Dairy', 'Grains'
}
Run Code Online (Sandbox Code Playgroud)

我有一堆Ingredient物品:

var ingredients : [Ingredient] = ...
Run Code Online (Sandbox Code Playgroud)

我想从这些成分中收集不同部分数量.

我可以在Java中通过(依赖于Set类型的自动聚集)来做到这一点:

ingredients.stream().map(Ingredient::getSection).collect(Collectors.toSet()).count()
Run Code Online (Sandbox Code Playgroud)

或者,使用distinct()方法:

ingredients.stream().map(Ingredient::getSection).distinct().count()
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法在Swift中做一个类似的单线程.我做过的一些研究表明人们编写自己的方法来收集不同的值,但我希望有一个distinct()或者Set收集Swift类型的方法.

functional-programming swift

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

在容器中安装Docker以供GitLab CI构建使用

我是Docker的新手,但是有一个Java Web应用程序项目,我的Maven构建为此项目生成并安装Docker映像。即

mvn clean install
Run Code Online (Sandbox Code Playgroud)

产生:

REPOSITORY                             TAG                  IMAGE ID            CREATED             SIZE
registry.gitlab.com/me/myapp   0.0.1-SNAPSHOT-dev   12d69e5ab28b        45 minutes ago      666 MB
Run Code Online (Sandbox Code Playgroud)

我正在使用Spotify的Maven插件来构建它,然后可以使用以下命令将其部署到存储库中:

mvn docker:push
Run Code Online (Sandbox Code Playgroud)

哪个很棒。但是:我使用的是GitLab for CI,我的.gitlab-ci.yml文件包含:

image: maven:3.3.9-jdk-8

build:
  script: "mvn clean install && mvn docker:push"
Run Code Online (Sandbox Code Playgroud)

这几乎可以工作,但是失败了,因为没有运行该构建的容器中安装Docker :

[INFO] Building image registry.gitlab.com/me/myapp
Dec 31, 2016 8:30:45 PM org.apache.http.impl.execchain.RetryExec execute
INFO: I/O exception (java.io.IOException) caught when processing request to {}->unix://localhost:80: No such file or directory
Dec 31, 2016 8:30:45 PM org.apache.http.impl.execchain.RetryExec execute
INFO: …
Run Code Online (Sandbox Code Playgroud)

maven gitlab docker gitlab-ci docker-compose

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