【问题标题】:Test FTP connection using CFReadStreamCreateWithFTPURL in Swift在 Swift 中使用 CFReadStreamCreateWithFTPURL 测试 FTP 连接
【发布时间】:2014-07-13 00:02:14
【问题描述】:

我正在使用以下代码来尝试测试 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

【问题讨论】:

    标签: ios objective-c macos ftp swift


    【解决方案1】:

    CFReadStreamCreateWithFTPURL 方法返回一个Unmanaged<CFReadStream>(根据文档),这意味着这个特定的函数还没有与 Swift 兼容的注释来指示返回的值是否已被保留。有关详细信息,请参阅this section of the Swift book 中的“非托管对象”。

    对我来说,由于这个问题,这段代码没有编译通过CFReadStreamCreateWithFTPURL 调用。我没有看到布尔错误;奇怪的是,您在 CFReadStreamCreateWithFTPURL 调用中看到了该错误并且没有错误。你是 Beta3 吗?

    我能够获得要编译的代码:

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

    通过断言该函数已保留该值(同样,根据其文档)将非托管值转换为与 ARC 兼容的指针。

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

    【讨论】:

    • 谢谢,成功了。我正在使用 Beta2(构建 6A216f)。
    • @Matt 很高兴听到这个消息!
    猜你喜欢
    • 2018-06-18
    • 2011-04-13
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多