我使用以下代码尝试测试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。
答案 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}}。