ios - 在 Swift 中使用 CFReadStreamCreateWithFTPURL 测试 FTP 连接

标签 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 .

最佳答案

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/

相关文章:

Mac OS X 上更新后未导入 Python 包

ios - Xcode 异常断点总是在属性上暂停

macos - afconvert:将.mp3文件转换为.m4a时,如何保留标签信息和专辑封面?

ios - React Native facebook iOS sdk 构建失败

ios - 如何为spritekit中的节点添加滑动手势

ios - 将 NSUInteger 赋值给 BOOL 概念理解

ios - 即使方法确实存在,也无法识别的选择器发送到实例

ruby - RVM 安装 MacOS Mavericks

objective-c - dispatch_get_global_queue vs dispatch_get_main_queue

iphone - 如何在 iPhone 中滚动 map 时跟踪 map 区域