小编har*_*n78的帖子

NSDocument持有一个完整的文件夹?

我很抱歉,如果这个论点已被涵盖,但经过一些研究后我发现没有什么精确的.

我需要创建一个基于文档的应用程序,其中文档实际上不是单个文件,而是目录中的文件的结构化集合.窗口将显示包含在文件夹中的pdf,具有特定的文件名,并使用文件夹中其他文件的信息进行丰富.我无法使用pdf注释来实现这一点,我真的需要将文件与pdf分开.

实现这一目标的最佳方法是什么?我找到的所有示例代码都使用单个文件..

directory cocoa objective-c nsdocument

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

如何在RxSwift中翻译if-else?

我正在尝试学习库RxSwift

我有一些像这样的代码:

if data.checkAllIsOk()
{ 
    [do things]
}
else
{ 
    [show alert]
}
Run Code Online (Sandbox Code Playgroud)

现在我需要在检查之前更新服务器上的数据,因此我建模了一个返回Observable的getData().

我目前的做法是:

getData()  
    >- flatMap{ (data:Data) -> Observable<Bool> in
        _=0 // workaround for type inference bugs
        return just(data.checkAllIsOk())
    }
    >- subscribeNext{ (ok) -> Void in
        if ok
        {
            [do the things]
        }
        else
        {
            [show the alert]
        }
    } 
    >- disposeBag.addDisposable()
Run Code Online (Sandbox Code Playgroud)

它的工作原理(或它应该,我仍然在写它),但它感觉不对..是否有更"反应"的方式来做它?什么是最合适的运营商?

也许为"false"返回错误并使用catch块?

更新

按照ssrobbi建议的方法,我在2个不同的subscribeNext中拆分了2个分支,并使用过滤器来选择正或负分支.这是产生的代码:

let checkData=getData()  
        >- flatMap{ (data:Data) -> Observable<Bool> in
            _=0 
            return just(data.checkAllIsOk())
        }
        >- shareReplay(1)
}
[...]
checkData
    >- filter{ (ok) -> …
Run Code Online (Sandbox Code Playgroud)

reactive-programming swift rx-swift

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

Swift 泛型运算符

我写了一个这样的类:

struct Size {
    var width:Double=0
    var height:Double=0
    init(width:Double=0,height:Double=0)
    {
        self.width=width
        self.height=height
    }
    [...]
}
Run Code Online (Sandbox Code Playgroud)

现在我希望能够为某个数字划分大小,并且我想使用泛型来获取可转换为 Double 的每种类型的函数。例如IntCGFloatFloat

但是当我插入函数时:

func /<T>(lhs:Size,rhs:T)->Size
{
    return Size(width:lhs.width/Double(rhs),height:lhs.height/Double(rhs))
}
Run Code Online (Sandbox Code Playgroud)

我收到错误

error: cannot invoke 'init' with an argument list of type '(width: Double, height: Double)'
        return Size(width:Double(lhs.width/rhs),height:Double(lhs.height/rhs))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

这真的很奇怪,因为传递的列表是类(Double)中定义的确切类型。

如果我以这种方式重写它:

func /<T>(lhs:Size,rhs:T)->Size
{
    let drhs=Double(rhs)
    return Size(width:lhs.width/drhs,height:lhs.height/drhs)
}
Run Code Online (Sandbox Code Playgroud)

然后我得到错误:

error: cannot invoke 'init' with an argument of type 'T'
    let drhs=Double(rhs)
             ^~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

这更奇怪,因为 Swift 库文件有很多 Double、Int 或 Float 类型的初始化器:

extension …
Run Code Online (Sandbox Code Playgroud)

generics operator-overloading swift

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