在Swift中使用CFReadStreamCreateWithFTPURLtestingFTP连接

我正在使用下面的代码来尝试testing一个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 } 

当我尝试build立这个,线var cfstatus:Boolean = CFReadStreamOpen(FTPStream) as Boolean返回错误Cannot convert the expression's type 'Boolean' to type 'CFReadStream!' 。 如果我删除expression式两边的types声明,则返回的错误是Cannot convert the expression's type 'Boolean' to type '$T3'

我哪里错了?

注: cstatus定义和声明是基于这个职位 。

CFReadStreamCreateWithFTPURL方法返回一个Unmanaged<CFReadStream> (根据文档),这意味着这个特殊的函数还没有兼容Swift的注释,指示返回的值是否被保留。 有关更多详细信息,请参阅Swift书本部分中的 “Unmanaged Objects”。

对我来说,这个代码不会因为这个问题而编译过去的CFReadStreamCreateWithFTPURL调用。 我没有看到布尔错误; 奇怪的是,你看到错误,并没有在CFReadStreamCreateWithFTPURL调用错误。 你在Beta3上?

我能够得到的代码编译:

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

它通过声明函数已经保留了值(再次按照它的文档)将非托pipe值转换成与ARC兼容的指针。

顺便说一句,这是一个挑剔的,但所有的var的可以let