小编Zac*_*Zac的帖子

在Swift 2中使用Dictionary上的map,返回一个Dictionary

我无法弄清楚Swift 2的特殊风格map:

我正在读一本字典(来自plist文件),所以我有一个[String: AnyObject]:

let dictionary = NSDictionary(contentsOfFile: path) as? [String: AnyObject] 
Run Code Online (Sandbox Code Playgroud)

我的目标是从字典Strings转换为记录器实例字典.这将是[String: XCGLogger]:

let loggers = dictionary
    .map { (n, l) in [ n: newLogger(l.0, withLevel: level(l.1)) ] }
Run Code Online (Sandbox Code Playgroud)

但是,这是返回一个[[String: XCGLogger]](看起来像一个字典数组给我).问题是如何返回扁平字典.当我尝试使用时,flatMap我开始围绕关于闭包的错误或者无法在类型上调用flatMap (Key, Value) -> NSDictionary.

dictionary swift swift2

11
推荐指数
2
解决办法
9604
查看次数

Slick/Scala:什么是Rep [Bind],如何将其变成值?

我试图弄清楚Slick(Scala功能关系模型).我已经开始在Slick 3.0.0中构建原型,但当然......大多数文档都已过时或不完整.

我已经设法达到了可以创建模式并从数据库返回对象的程度.

问题是,我要回的是"Rep [Bind]"而不是我希望得到的对象.我无法弄清楚这个值是做什么的.例如,如果我尝试像rep.countDistinct.result这样的东西,我就会崩溃.

以下是代码的快速概要...为简洁起见,删除了一些内容:

class UserModel(tag: Tag) extends Table[User](tag, "app_dat_user_t") {
    def id = column[Long]("n_user_id", O.PrimaryKey)
    def created = column[Long]("d_timestamp_created")

    def * = (id.?, created) <> (User.tupled, User.unapply)
}

case class User(id: Option[Long], created: Long)

val users = TableQuery[UserModel]

(users.schema).create

db.run(users += User(Option(1), 2))

println("ID is ... " + users.map(_.id)) // prints "Rep[Bind]"... huh?

val users = for (user <- users) yield user

println(users.map(_.id).toString) // Also prints "Rep[Bind]"...
Run Code Online (Sandbox Code Playgroud)

我找不到一种"解包"Rep对象的方法,但我找不到任何明确的解释它是什么或如何使用它.

scala slick

9
推荐指数
1
解决办法
7715
查看次数

如何为Postgres DB配置Slick 3.0.0(使用Hikari或不使用)Typesafe Play conf

我有一个测试应用程序,可以在H2内存数据库中正常工作.现在我正在尝试将它连接到我们的真实数据库.我要么得到一个内部Slick异常,要么得到一个"No suitable driver"异常,这取决于我的方法:

这是我的简单测试(再次,它似乎在内存中运行良好):

"The glimple data model classes" should {
    "insert a glimple row in the database" in {
        val db = Database.forConfig("db.edb") // works on db.h2mem1
        val glimples = TableQuery[GPGlimpleModel]

        val insertGlimples = db.run(glimples += GPGlimple(None, None, 1, true, true, 1))

        val count = Await.result(insertGlimples, Duration.Inf)

        println(count)
        count must beEqualTo(1)
        ...
Run Code Online (Sandbox Code Playgroud)

如果我打开连接池,如下所示:

db.edb = {
    driver = org.postgresql.Driver
    url = "jdbc:postgresql://db-server-1.hyrax.com:5444/CI_0"
    user = "xxx" // masked to protect the innocent
    password = "xxx" // masked to protect the …
Run Code Online (Sandbox Code Playgroud)

postgresql scala playframework slick

8
推荐指数
2
解决办法
8389
查看次数

如何在Slick中调用存储过程并获取返回值(使用Scala)

我正在尝试从Slick 3.0(在Play Framework中)调用存储过程.我一直在翻阅文档,但不幸的是,Typesafe中普通SQL文档从未显示调用存储过程.

看起来非常简单的是导致一个通常模糊的Scala错误消息:

val f = Try {
    val call: DBIO[Int] = sqlu"?=call app_glimpulse_invitation_pkg.n_send_invitation(${i.token}, ${i.recipientAccountId.getOrElse(None)}, ${i.email}, ${i.phoneNumber}, ${requestType})"

    val result: Future[Int] = db.run(call)

    val r = Await.result(result, Duration.Inf) // should only return one; use .seq.count(_.id != null)) to validate
    val z = result.value.get.get // should return the stored procedure return value...?
}
Run Code Online (Sandbox Code Playgroud)

上面的代码导致此编译器错误:

[error] /Users/zbeckman/Projects/Glimpulse/Server-2/project/glimpulse-server/app/controllers/GPInviteService/GPInviteService.scala:120: could not find implicit value for parameter e: slick.jdbc.SetParameter[Product with Serializable]
[error]             val call: DBIO[Int] = sqlu"?=call app_glimpulse_invitation_pkg.n_send_invitation(${i.token}, …
Run Code Online (Sandbox Code Playgroud)

postgresql stored-procedures scala playframework slick

7
推荐指数
1
解决办法
3534
查看次数

在Play Framework中使用Slick 3.0 Scala查询的"正确"方法

我正在使用Slick 3.0和(当然)几乎所有的例子都包括Slick 2.x. 事情发生了变化,坦率地说,似乎复杂,而不是更少.

这是一个例子:我想通过id得到一个对象(一个GPPerson).这就是我现在所拥有的,它似乎非常冗长......比Slick 2.x更多:

def get(id: GPID): Option[GPPerson] = Await.result(
    db.run(
        people.filter(_.id === id).result), Duration.Inf
    ).headOption
Run Code Online (Sandbox Code Playgroud)

在Slick 2.x中,除了其他因素之外,事情变得更容易了.但上面似乎是我提出的最简洁的表达方式.

它也没有真正解决我需要添加的异常处理.

scala playframework slick

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

如何从Scala中的字符串中除去数字之外的所有内容(快速一行)

这让我疯狂...... 必须有一种方法可以在String中删除所有非数字字符(或执行其他简单过滤).

示例:我想将电话号码("+72(93)2342-7772"或"+1 310-777-2341")转换为简单的数字字符串(不是Int),例如"729323427772"或"13107772341" ".

我尝试"[\\d]+".r.findAllIn(phoneNumber)了返回一个Iteratee,然后我不得不将它们重新组合成一个字符串......似乎非常浪费.

我也想出了:phoneNumber.filter("0123456789".contains(_)) 但是对于其他情况来说这变得乏味.例如,删除所有标点符号...我真的在使用正则表达式之后的东西,因此它具有更广泛的应用,而不仅仅是过滤掉数字.

任何人都有一个花哨的Scala单线为此更直接?

scala filter

5
推荐指数
2
解决办法
1966
查看次数

在Scala中比较两个Byte []的相等性(检查二进制图像数据)

我想比较Byte[]包含二进制图像表示的两个(小).我不想使用MD5或SHA或诸如此类的东西,因为没有意义......这些只是迭代数组,计算校验和等,而且没有必要.

这似乎应该有一个超级简单的方法来遍历两个数组中,a1a2对其进行比较平等,如:

(a1, a2).forall(a, b => a == b)
Run Code Online (Sandbox Code Playgroud)

但这当然不起作用......

scala

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

如何减少ScalaCheck生成的测试用例数?

我正在尝试解决两个ScalaCheck(+ specs2)问题:

  1. 有没有办法改变ScalaCheck生成的案例数量?

  2. 如何生成包含某些Unicode字符的字符串?

例如,我想生成大约10个包含字母数字和Unicode字符的随机字符串.但是,此代码始终生成100个随机字符串,并且它们严格基于字母字符:

"make a random string" in {
    def stringGenerator = Gen.alphaStr.suchThat(_.length < 40)
    implicit def randomString: Arbitrary[String] = Arbitrary(stringGenerator)

    "the string" ! prop { (s: String) => (s.length > 20 && s.length < 40) ==> { println(s); success; } }.setArbitrary(randomString)
}
Run Code Online (Sandbox Code Playgroud)

编辑

我刚才意识到还有另一个问题:

  1. 通常,ScalaCheck放弃而不产生100个测试用例

当然,我不想要100,但显然我的代码试图生成一套过于复杂的规则.它最后一次运行,我看到"47次测试后放弃了".

unicode scala scalacheck specs2

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

未定义Scala案例类的备用构造函数:没有足够的方法参数

我无法弄清楚为什么这不起作用...在编译期间我收到以下错误:

[error] /Users/zbeckman/Projects/Glimpulse/Server-2/project/glimpulse-server/app/service/GPGlimpleService.scala:17: not enough arguments for method apply: (id: Long, glimpleId: Long, layerOrder: Int, created: Long, attachments: List[models.GPAttachment])models.GPLayer in object GPLayer.
[error] Unspecified value parameter attachments.
[error]     private val layer1: List[GPLayer] = List(GPLayer(1, 42, 1, 9), GPLayer(2, 42, 2, 9))
Run Code Online (Sandbox Code Playgroud)

对于这个案例类...请注意备用构造函数的定义:

case class GPLayer(id: Long, glimpleId: Long, layerOrder: Int, created: Long, attachments: List[GPAttachment]) {
    def this(id: Long, glimpleId: Long, layerOrder: Int, created: Long) = this(id, glimpleId, layerOrder, created, List[GPAttachment]())
}
Run Code Online (Sandbox Code Playgroud)

scala

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

如何返回Swift枚举以处理错误条件

我正在尝试在Swift中创建一个简单的错误处理结构.我想要做的是返回一个包含"成功"代码或"错误"代码的类型.但是为了使它有点棘手,在错误的情况下,我还想得到一条消息和一个诊断字符串.

我想出了这个,编译得很好,就返回成功/错误而言效果很好:

enum PasswordValidationResult {
    case Success
    case PasswordError(message: String, diagnostic: String)

    func isValid() -> Bool {
        switch self {
        case .Success:
            return true
        case .PasswordError:
            return false
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以返回所需的值:

return PasswordValidationResult.PasswordError(message: "You can't do that", diagnostic: "XYZ")
Run Code Online (Sandbox Code Playgroud)

当我尝试引用返回值时出现问题.

显然,我可以使用isValid()函数来测试成功条件,但是我找不到任何引用消息和诊断字符串的语法.

例如,试试这个:

  myError = someFunction()

  if myError == PasswordValidationResult.Error {
    // None of this will compile, at all...
    println(myError.message)
  }
Run Code Online (Sandbox Code Playgroud)

syntax error-handling enums swift

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

使用 statement.setArray() 将 Scala Option[List[_]] 传递给 Java JDBC Array

我正在尝试构建从 Scala 到 JDBC callableStatements 的接口。在大多数情况下,它很简单,除了Lists.

我需要能够采用List某种类型的 Scala ,并将其转换为可以传递给的 Java 数组,statement.setArray(type, array)但我没有任何运气(部分是因为我不太了解 Java 和 JDBC)。

这是我想要做的:

for (parameter <- ps.parameters) {
    case GPArrayIn(None, t) => callableStatement.setNull(index, t)
    case GPIn(v: Some[_], Types.INTEGER) => callableStatement.setInt(index, v.get.asInstanceOf[Int])
    case GPIn(v: Some[_], Types.VARCHAR | Types.LONGVARCHAR) => callableStatement.setString(index, v.get.asInstanceOf[String])
    case GPArrayIn(v: Some[List[_]], Types.INTEGER) => callableStatement.setArray(Types.INTEGER, ???? )
    case GPArrayIn(v: Some[List[_]], Types.VARCHAR | Types.LONGVARCHAR) => callableStatement.setArray(Types.VARCHAR, ???? )
    ...
Run Code Online (Sandbox Code Playgroud)

对于简单的值,这非常简单,但是当涉及到setArray()调用时,我被卡住了。

任何建议将不胜感激。被困在这几个小时......

java arrays scala jdbc callable-statement

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

在iOS键盘上方附加自定义警报视图

我正在尝试设计("设计合理",而不是"黑客")自定义警报视图.视图应该连接到键盘的顶部; 用键盘向上滑动(如果有警报)或被隐藏(如果没有警报).

视图应始终"粘住"键盘...例如,包括键盘隐藏时.在这种情况下,视图应该与键盘一起向下滑动,在视线之外.

以下是我正在尝试实现的示例(使用活动警报):

键盘上方的自定义警报视图

我原本考虑过继承UIAlertView,但看起来不推荐这样做.经过一些实验,这显然是一个棘手的任务.我有一个警报显示但是,它变成了与键盘保持同步的问题,而我还没有找到一种方法让它与键盘的运动"跟踪"......不顺利.

有任何想法吗?

uikit uialertview ios swift

0
推荐指数
1
解决办法
938
查看次数