小编Edu*_*rdo的帖子

Swift中的反向范围

有没有办法在Swift中使用反向范围?

例如:

for i in 5...1 {
  // do something
}
Run Code Online (Sandbox Code Playgroud)

是一个无限循环.

我知道我可以使用1..5,计算j = 6 - i和使用j我的索引.我只是想知道是否有更清晰的东西?

swift

95
推荐指数
4
解决办法
3万
查看次数

使用Avian的iOS上的Scala

有一个相对较新的轻量级JVM,称为Avian,可以为iOS目标生成可执行文件.

网站上没有太多文档(用Google搜索的文档也不多).我想知道是否有人知道如何使用Avian在iOS上运行基本Scala程序的分步教程.

iphone jvm scala ios avian

60
推荐指数
2
解决办法
5583
查看次数

Swift中的指针,指针算术和原始数据

我的应用程序使用了一个在二进制文件中编码的有点复杂的不可变数据结构.我需要在字节级别访问它,避免任何复制.通常,我会使用C或C++指针算法和类型转换来访问和解释原始字节值.我想对Swift做同样的事情.

我发现以下工作:

class RawData {
    var data: NSData!

    init(rawData: NSData) {
      data = rawData
    }

    func read<T>(byteLocation: Int) -> T {
      let bytes = data.subdataWithRange(NSMakeRange(byteLocation, sizeof(T))).bytes
      return UnsafePointer<T>(bytes).memory
    }

    func example_ReadAnIntAtByteLocation5() -> Int {
      return read(5) as Int
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我不确定它的效率如何.每次调用它时都要做data.subdataWithRangeNSMakeRange分配对象,或者它们只是处理指针的语法糖?

在Swift中有更好的方法吗?

编辑:

我创建了一个小的Objective-C类,它只封装了一个函数,用于将指针偏移给定的字节数:

@implementation RawDataOffsetPointer

inline void* offsetPointer(void* ptr, int bytes){
    return (char*)ptr + bytes;
}

@end
Run Code Online (Sandbox Code Playgroud)

如果我在桥接头中包含此类,那么我可以将我的read方法更改为

func read<T>(byteLocation: Int) -> T {
  let ptr = offsetPointer(data.bytes, CInt(byteLocation))
  return UnsafePointer<T>(ptr).memory
}
Run Code Online (Sandbox Code Playgroud)

它不会从我的缓冲区复制数据,也不会分配其他对象. …

swift

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

将无形可扩展记录传递给函数

我正在尝试学习Shapeless(使用版本2.10.2).我创建了一个非常简单的可扩展记录:

val rec1 = ("foo" ->> 42) :: HNil

根据REPL,这有类型

shapeless.::[Int with shapeless.record.KeyTag[String("foo"),Int],shapeless.HNil]

我试图定义一个简单的函数:

def fun(x: ::[Int with KeyTag[String("foo"), Int], HNil]) = x("foo")
Run Code Online (Sandbox Code Playgroud)

但它甚至没有编译.我不能在类型声明中使用String("foo"),并得到错误.

我有两个问题:

  1. 如何在代码中指定可扩展记录的类型?
  2. 处理具有更多字段的记录时,类型声明的长度和复杂性将无法管理.在给定记录的特定实例或其他一些解决方法的情况下,有没有办法为类型创建别名?

编辑

我发现:

val rec1 = ("foo" ->> 42) :: HNil
val rec2 = ("foo" ->> 43) :: HNil
var x = rec1
x = rec2
Run Code Online (Sandbox Code Playgroud)

效果很好.我得出结论rec1,rec2和x属于同一类型.我只是不知道如何在代码中表达该类型!

scala shapeless

18
推荐指数
2
解决办法
2255
查看次数

Scala缓冲区:大小或长度?

我正在使用一个mutable Buffer,需要找出它有多少元素.

两者sizelength方法都是定义的,继承自不同的特征.

是否有任何实际的性能差异,或者它们是否可以被视为完全同义词?

scala scala-collections

12
推荐指数
2
解决办法
7772
查看次数

如何使用在自适应故事板中关闭iPhone弹出窗口

我是iOS开发的新手,我正在尝试同时学习故事板,Swift和iOS 8的新功能.

我创建了一个非常简单的故事板,使用Popover演示文件segue来显示另一个视图.在模拟器上,如果我为iPad运行它,它按预期工作.但是,如果我为iPhone而不是弹出窗口运行它,它会在原始视图的顶部显示全屏视图.这可以; 但是,没有办法解雇它并回到原来的屏幕.

我观看了WWDC 2014视频"228 A Look inside presentation controllers",如果他们完全使用代码构建用户界面,他们可以显示一个关闭按钮.

我还看过"411界面构建器中的新功能"会话,他们说这可以在Interface Builder中完成,但他们没有显示它,承诺在实验室中展示如何做,如果有人感兴趣的话.不幸的是,我没有参加WWDC 2014,或者认识任何人.我的Google搜索也没有返回任何有用的内容.

uistoryboard uistoryboardsegue ios8

12
推荐指数
2
解决办法
8002
查看次数

使用GCD并行处理数组

我有一个大型数组,我想通过将它的片段交给几个异步任务来处理.作为概念证明,我编写了以下代码:

class TestParallelArrayProcessing {
    let array: [Int]
    var summary: [Int]

    init() {
        array = Array<Int>(count: 500000, repeatedValue: 0)
        for i in 0 ..< 500000 {
            array[i] = Int(arc4random_uniform(10))
        }
        summary = Array<Int>(count: 10, repeatedValue: 0)
    }

    func calcSummary() {
        let group = dispatch_group_create()
        let queue = dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)

        for i in 0 ..< 10 {
            dispatch_group_async(group, queue, {
                let base = i * 50000
                for x in base ..< base + 50000 {
                    self.summary[i] += self.array[x]
                }
            })
        }
        dispatch_group_notify(group, …
Run Code Online (Sandbox Code Playgroud)

parallel-processing grand-central-dispatch swift

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

惯用法治疗方法[布尔]

在我的Scala程序中,我收到了一些JSON.

其中一个字段是可选的布尔值.如果字段丢失,或者其值为false,我想返回None.如果它的值是真的,我想回来Some(true).

这相当于转换Some(false)None,我定义了以下功能:

def boolmap(ob: Option[Boolean]) = if(ob == Some(false)) None else ob

它有效,但它似乎不是非常惯用.有什么更优雅的吗?

scala

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

Akka发送延迟消息给自己找不到隐式ExecutionContext

我正在使用Akka 2.1.4.我需要我的一个演员向自己发送一条延迟的消息.

我试过,从演员的内部receive:

context.system.scheduler.scheduleOnce(1 second, self, msg)

但是,它不能编译,因为它找不到隐式的ExecutionContext.我在哪里可以得到它?

注意:我知道实际发件人不是我的演员,但这没关系,因为我不需要知道发件人是谁.

scala akka

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

如何在Xcode 6中确定Swift推断类型

说我有类似的东西

let a = <some-complicated-expression>

在Xcode中有什么方法可以检查编译器推断出哪种类型a

编辑:\

例如,在Eclipse Scala IDE中,通过将鼠标悬停在变量名称上,编辑器将显示推断类型

xcode swift

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