在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
。