我正在使用以下代码来尝试测试 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 .
最佳答案
CFReadStreamCreateWithFTPURL
方法返回 Unmanaged<CFReadStream>
(根据文档),这意味着此特定函数还没有与 Swift 兼容的注释,指示返回值是否已保留。有关详细信息,请参阅 this section of the Swift book 中的“非托管对象” .
对我来说,这段代码无法通过 CFReadStreamCreateWithFTPURL
编译因为这个问题打电话。我没有看到 bool 错误;奇怪的是你在 CFReadStreamCreateWithFTPURL
上看到了那个错误并且没有错误称呼。你在使用 Beta3 吗?
我能够得到代码来编译:
let FTPStream = CFReadStreamCreateWithFTPURL(nil, ftpNSURL).takeRetainedValue()
它通过断言该函数已经保留了该值(同样,根据其文档)将非托管值转换为 ARC 兼容指针。
顺便说一句,这是一个吹毛求疵,但你所有的var
可以是 let
的。
关于ios - 在 Swift 中使用 CFReadStreamCreateWithFTPURL 测试 FTP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24718378/