Вам нужно только количество завершенных 7-дневных интервалов с первой записи?
dvec <- as.Date("2001-04-01")+0:90
dweek <- as.numeric(dvec-dvec[1]) %/% 7
dweek[1:21]
# [1] 0 0 0 0 0 0 0 1 1 1 1 1 1 1 2 2 2 2 2 2 2
Насколько я знаю, NSData
- это просто объект данных, который обертывает массив байтов:
... поэтому одним из способов, о котором я могу думать, если вы хотите открыть его тип MIME, является проверка самих байтов и затем предположим, что там есть. Вот пример этого здесь: Поиск типа изображения из NSData или UIImage
Я также нашел это: Определить тип MIME NSData, загруженный из файла ; который относится к некоторой внутренней базе данных (я думаю), которая может использоваться для поиска типа MIME.
Но, как говорит Том Харрингтон в своем ответе, это может стать сложным в зависимости от того, с чем вы имеете дело.
Изменить ...
Конечно, это второе решение зависит от расширения файла, которого у вас явно нет, но я уверен, что вы это уже заметили.
❤️ Swift
extension Data {
private static let mimeTypeSignatures: [UInt8 : String] = [
0xFF : "image/jpeg",
0x89 : "image/png",
0x47 : "image/gif",
0x49 : "image/tiff",
0x4D : "image/tiff",
0x25 : "application/pdf",
0xD0 : "application/vnd",
0x46 : "text/plain",
]
var mimeType: String {
var c: UInt8 = 0
copyBytes(to: &c, count: 1)
return Data.mimeTypeSignatures[c] ?? "application/octet-stream"
}
}
Поскольку вы говорите, что вы загружаете эти данные, вы уже должны знать тип MIME. Вы создали объект данных, вы знаете, откуда пришли данные, и существует ограниченное количество типов MIME. Поэтому используйте то, что применимо к вашим данным. Для изображения это, вероятно, image/jpeg
или image/png
. Для видео есть куча типов video/
. Вы можете найти длинный список строк типа MIME на вашем Mac в /etc/apache2/mime.types
. Вы захотите, чтобы один или несколько из них зависели от того, какое видео вы имеете.
Определение типа MIME является липкой проблемой; NSData
может кодировать любые двоичные данные. Единственный способ определить, что было закодировано, - это изучить байты. Это, в свою очередь, означает некоторое понимание того, какие потоки байтов существуют в разных типах файлов. Должно быть возможно использовать словарь поиска во многих (но не во всех) случаях, и может существовать реализация с открытым исходным кодом где-то для общих типов файлов. Чтобы узнать, что с этим связано, попробуйте man file
на вашем Mac и посмотрите в /usr/share/file/magic/
, чтобы узнать, как идентифицируются различные типы файлов (команда file
не создает типы MIME, но она анализирует содержимое файла, чтобы попытаться определить типы файлов, так что это тот же принцип).
application/octet-stream
, чтобы указать «какие-то двоичные данные». Если вам нужно что-то более конкретное, лучше всего загрузить его в класс AVFoundation
(возможно, AVAsset
), а затем посмотреть на метаданные, чтобы выбрать тип MIME.
– Tom Harrington
14 February 2014 в 23:41
var values = [UInt8] (повторяется: 0, count: imgData.count)
imgData.copyBytes (to: & amp; values, count: 1)
switch values {
case 0xff:
return "image/jpeg"
case 0x89:
return "image/png"
case 0x47:
return "image/gif"
case 0x49, 0x4d:
return "image/tiff"
}
return ""