小编Geo*_*rid的帖子

Xcode 7:无法使用单元测试目标创建Swift命令行工具

哦,Xcode!

我受到了阻碍.如果我创建一个Mac OS Cocoa应用程序,我会免费获得一个单元测试目标.但是我想编写一个命令行工具(甚至是一个可以链接到命令行工具的库)并编写一些单元测试.如果我能搞清楚的话,我会被愚弄.

我已经足够远了,我有一个命令行目标和一个测试目标.我可以"@testable import"我的commnd line模块并使用测试代码中的代码而Xcode中没有错误.但是,一旦我尝试运行我的测试(Cmd-U),我就会收到链接错误.主模块中的所有类都不能链接.什么?

我已经搞砸了好几个小时了,伟大的谷歌一直没有帮助.(我正在使用Xcode 7,而Xcode 6似乎非常不同.)任何人都可以帮助我吗?

谢谢.

xcode unit-testing swift

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

如何使用反射从Go(golang)中的地图"删除"一个键

我试图使用反射从地图中删除一个键,我找不到办法.我错过了什么?我有以下代码(http://play.golang.org/p/7Et8mgmSKO):

package main

import (
    "fmt"
    "reflect"
)

func main() {
    m := map[string]bool{
        "a": true,
        "b": true,
    }

    delete(m, "a")
    fmt.Printf("DELETE: %v\n", m)

    m = map[string]bool{
        "a": true,
        "b": true,
    }

    m["a"] = false
    fmt.Printf("ASSIGN: %v\n", m)

    m = map[string]bool{
        "a": true,
        "b": true,
    }
    v := reflect.ValueOf(m)
    v.SetMapIndex(reflect.ValueOf("a"), reflect.Zero(reflect.TypeOf(m).Elem()))
    fmt.Printf("REFLECT: %v\n", m)
}
Run Code Online (Sandbox Code Playgroud)

这会产生输出:

DELETE: map[b:true]
ASSIGN: map[a:false b:true]
REFLECT: map[a:false b:true]
Run Code Online (Sandbox Code Playgroud)

如您所见,反射情况似乎与指定零值相同,而不是删除它.这似乎与reflect.SetMapIndex()的文档相反(http://golang.org/pkg/reflect/#Value.SetMapIndex):

如果val为零值,则SetMapIndex将从地图中删除该键.

对于我的应用程序,我需要从地图中删除密钥.有任何想法吗?

go

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

将StateT移入和移出IO

我敢肯定我一定错过了什么.

我是Haskell的新手,曲线非常陡峭.我正在达到我的玩具项目的重点,我真的想要使用State monad来避免在任何地方传递一千个论点.我无法理解如何将IO中的State monad传递给纯代码.概念上像这样的东西(除了StateT而不是ExceptT):

import Control.Monad.Except
import Control.Monad.Identity

type PlayM = Except String 
type PlayMIO = ExceptT String IO

puree :: String -> PlayM String
puree = return . ("bb"++)

impuree :: String -> PlayMIO String
impuree s = do
  a <- return $ runIdentity $ runExceptT $ puree s
  return $ "aa" ++ a

main = do
  runExceptT $ impuree "foo"
  putStrLn "hi"
Run Code Online (Sandbox Code Playgroud)

除了这不编译,给我这样的东西:

play.hs:15:20:
Couldn't match expected type ‘[Char]’
            with actual type ‘Either String String’
In the second …
Run Code Online (Sandbox Code Playgroud)

monads haskell

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

Kotlin:具有可为空的返回值的BiFunction无法编译

这个(大大简化了)的代码无法为我编译。不知道为什么。返回类型是Entry?null似乎是一个有效的值给我。

val foo = BiFunction<Int, List<Entry>, Entry?> { foo:Int, bar:List<Entry> ->
    null
}
Run Code Online (Sandbox Code Playgroud)

错误消息是 Null can not be a value of a non-null type Entry

谁能告诉我我所缺少的吗?

我在用:

ext.kotlin_version = '1.2.10'
compile "io.reactivex.rxjava2:rxjava:2.1.8"
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
Run Code Online (Sandbox Code Playgroud)

我欢迎任何建议。新年快乐!

kotlin rx-java rx-android

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

Kotlin、Dagger、Nullable 和 Named 找不到 @Inject 的值

我有一个 String? 类型的属性。我可以很好地 @Inject 值,直到我尝试向属性添加 @Named 属性。如果我使用“字符串”而不是可以为空的字符串,一切也都可以正常工作,但该值可以为空,所以我需要“?”。

在我的模块中,我有:

@Provides
@Named("someStringOrNull")
fun provideSomeStringOrNull(): String? = "STRING OR NULL"
Run Code Online (Sandbox Code Playgroud)

在我的活动中,我有:

@set:Inject
@set:Named("someStringOrNull")
var someStringOrNull: String? = null
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Error:(11, 2) error: java.lang.String cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method.
public abstract void inject(@org.jetbrains.annotations.NotNull()
                     ^
  java.lang.String is injected at
      com.scrawlsoft.daggerwoes.MainActivity.setSomeStringOrNull(p0)
  com.scrawlsoft.daggerwoes.MainActivity is injected at
      com.scrawlsoft.daggerwoes.AppComponent.inject(target)
Run Code Online (Sandbox Code Playgroud)

如果我删除 @Named attr,效果很好,所以我相当确定“@set:”是正确的,但我可能会弄错。

关于如何开展这项工作有什么建议吗?(目前,我正在考虑将其包装在自定义类中,这样我就不需要 @Named,但这对我来说似乎很浪费。)

完整的源代码可以在以下位置找到: https: //github.com/gmadrid/DaggerWoes/tree/master/app/src/main/java/com/scrawlsoft/daggerwoes

感谢您的帮助。

android kotlin dagger-2

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

标签 统计

kotlin ×2

android ×1

dagger-2 ×1

go ×1

haskell ×1

monads ×1

rx-android ×1

rx-java ×1

swift ×1

unit-testing ×1

xcode ×1