当判断文件类型时,你可以使用文件的签名字节序列来确定文件的类型。对于 MP4 文件,其签名字节序列是 [0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x6D, 0x70, 0x34, 0x32]

以下是更新后的代码示例,演示了如何判断文件类型为 MKV 或 MP4:

guard let fileURL = URL(string: "<https://example.com/your_file.mp4>") else {
    // 处理无效的URL
    return
}

var request = URLRequest(url: fileURL)
let range = "bytes=0-11" // 指定要下载的数据范围,这里是前 12 个字节
request.setValue(range, forHTTPHeaderField: "Range")

let session = URLSession.shared
let task = session.dataTask(with: request) { (data, response, error) in
    if let error = error {
        // 处理下载错误
        print("Error downloading file: \\\\(error.localizedDescription)")
        return
    }

    guard let httpResponse = response as? HTTPURLResponse,
          (200...299).contains(httpResponse.statusCode) else {
        // 处理无效的HTTP响应
        print("Invalid HTTP response")
        return
    }

    guard let fileData = data else {
        // 处理无效的文件数据
        print("Invalid file data")
        return
    }

    let mkvSignature: [UInt8] = [0x1A, 0x45, 0xDF, 0xA3] // MKV 文件的签名字节序列
    let mp4Signature: [UInt8] = [0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x6D, 0x70, 0x34, 0x32] // MP4 文件的签名字节序列

    if fileData.count >= mkvSignature.count && fileData[0..<mkvSignature.count] == mkvSignature {
        // 文件被判定为 MKV 格式
        print("File is in MKV format.")
    } else if fileData.count >= mp4Signature.count && fileData[0..<mp4Signature.count] == mp4Signature {
        // 文件被判定为 MP4 格式
        print("File is in MP4 format.")
    } else {
        // 文件不是 MKV 或 MP4 格式
        print("File is not in MKV or MP4 format.")
    }
}

task.resume()

在这段更新的代码中,我们添加了 MP4 文件的签名字节序列,并在判断文件类型的逻辑中进行了相应的调整。现在,根据下载的数据与 MKV 和 MP4 的签名字节序列进行比较,可以确定文件的类型。

请注意替换代码中的 "https://example.com/your_file.mp4" 为你实际文件的网络URL。

这段代码将下载文件的前 12 个字节,并根据签名字节序列判断文件类型为 MKV 或 MP4。

希望这个更新的示例代码能够满足你的需求!如果你有其他问题,请随时提问。