迭代Web文件夹以将文件名放入数组的Swift方法

3
我想将Web文件夹"mywwwaddress"中的文件名放入一个数组中,但println函数给出了一个空数组: []。
func files(){
    var urls : [NSURL] = []
    let dirUrl = NSURL(string: "mywwwadres")

    let fileManager = NSFileManager.defaultManager()
    let enumerator:NSDirectoryEnumerator? = fileManager.enumeratorAtURL(dirUrl!, includingPropertiesForKeys: nil, options: nil, errorHandler: nil)

    while let url = enumerator?.nextObject() as! NSURL? {
        urls.append(url)
    }

    println(urls)
}

在你的问题中,目录名为“mywwwaddress”,而在你的代码中,你使用的是“mywwwadres”(只有一个ds)。你是否仔细检查过目录名称的拼写是否正确? - Frank Schmitt
谢谢Frank,这是另一个地址,我不会在这个论坛上展示。 - Marcel
1个回答

0

当我使用本地文件系统上的目录URL尝试您的代码时,它对我来说可以正常工作,因此您可能需要添加更多错误处理以查看是否存在无法访问所使用的URL的问题。

另外,由于NSEnumerator符合SequenceType,因此您可以在其上使用for...in或其他序列处理操作,如map,这可以稍微简化代码。

这是一个带有更多错误处理的版本可供尝试:

func files() {

    let fileManager = NSFileManager.defaultManager()

    let url = NSURL(string: "mywwwadres")
    assert(url != nil, "Invalid URL")

    let enumerator = url.flatMap { fileManager.enumeratorAtURL($0,
                        includingPropertiesForKeys: nil,
                        options: nil)
        { url, error in
            println("error with url \(url): \(error)")
            return true  // true to keep going
        }
    }
    assert(enumerator != nil, "Failed to create enumerator")

    let urls = enumerator.map { enumerator in
        map(enumerator) { url in
            url as! NSURL
        }
    }

    println(urls ?? [])
}

在url:“http://ios.xxx.nl/img”处,我收到错误消息:url nil出现错误:Error Domain=NSCocoaErrorDomain Code=260“无法完成操作。(Cocoa error 260.)”UserInfo=0x7fd243e34a30 {NSURL=http://ios.xxxx.nl/img, NSFilePath=/img, NSUnderlyingError=0x7fd243e34990“无法完成操作。没有这样的文件或目录”} [] - Marcel
你的URL有问题。尝试在浏览器中打开它。 - Airspeed Velocity
在Web浏览器中,我无法打开“ios.xxx.nl/img”,并收到403禁止访问的错误提示,但我可以打开“ios.xxx.nl/img/flower.jpg”中的图像。这就是我想要枚举文件夹以读取Web文件夹内部图像的原因。是否有其他使用Swift代码的方法? - Marcel
很可能不是一个Swift问题,从根本上讲,Web服务器不允许您获取目录列表,我很抱歉。 - Airspeed Velocity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接