在Swift中使用CFReadStreamCreateWithFTPURL测试FTP连接

时间:2014-07-13 00:02:15

标签: ios objective-c macos ftp swift

我使用以下代码尝试测试FTP连接:

func OpenAndTestFTPConn(user:NSString, pass:NSString) -> Bool {

    var ftpstring = "ftp://\(user):\(pass)@\(txtTarget.stringValue)"
    var ftpNSURL = NSURL(string: ftpstring)
    var FTPStream = CFReadStreamCreateWithFTPURL(nil, ftpNSURL)
    var status:Bool
    var cfstatus:Boolean = CFReadStreamOpen(FTPStream) as Boolean
    if cfstatus == 0 {
        status = false
    }
    else {
        status = true
    }
    println(status)
    return status

}

当我尝试构建此内容时,行var cfstatus:Boolean = CFReadStreamOpen(FTPStream) as Boolean会返回错误Cannot convert the expression's type 'Boolean' to type 'CFReadStream!'。如果我删除表达式两边的类型声明,则返回的错误是Cannot convert the expression's type 'Boolean' to type '$T3'

我哪里错了?

注意:cstatus定义和语句基于this post

1 个答案:

答案 0 :(得分:2)

CFReadStreamCreateWithFTPURL方法返回Unmanaged<CFReadStream>(根据文档),这意味着此特定函数还没有与Swift兼容的注释,指示是否保留了返回值。有关更多详细信息,请参阅this section of the Swift book中的“非托管对象”。

对我来说,由于此问题,此代码无法通过CFReadStreamCreateWithFTPURL调用进行编译。我没有看到布尔错误;奇怪的是你在CFReadStreamCreateWithFTPURL电话上看到了这个错误而没有错误。你是Beta3吗?

我能够使用以下代码编译代码:

let FTPStream = CFReadStreamCreateWithFTPURL(nil, ftpNSURL).takeRetainedValue()

通过声明函数已保留该值(再次按照其文档)将非托管值转换为ARC兼容指针。

顺便说一下,这是一个挑剔,但你var的所有let都可以{{1}}。