Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save senseilearning/22e36277bc3afbb29a508886a88ebda4 to your computer and use it in GitHub Desktop.
Save senseilearning/22e36277bc3afbb29a508886a88ebda4 to your computer and use it in GitHub Desktop.
import Foundation
enum FileError: Error {
case fileNotFound
case dataReadError(Error)
}
func loadMp3DataFromBundle(fileName: String, fileExtension: String = "mp3") -> Result<Data, FileError> {
// 1. バンドルからファイルのURLを取得
guard let fileURL = Bundle.main.url(forResource: fileName, withExtension: fileExtension) else {
print("Error: \(fileName).\(fileExtension) not found in the app bundle.")
return .failure(.fileNotFound)
}
// 2. URLからDataオブジェクトとして読み込む
do {
let mp3Data = try Data(contentsOf: fileURL)
print("Successfully loaded \(mp3Data.count) bytes from \(fileName).\(fileExtension)")
return .success(mp3Data)
} catch {
print("Error reading data from \(fileURL): \(error)")
return .failure(.dataReadError(error))
}
}
// --- 使用例 ---
let result = loadMp3DataFromBundle(fileName: "music") // "music.mp3"を読み込む
switch result {
case .success(let mp3Data):
// mp3Data は Data 型 (バイト列)
// この mp3Data をKotlin側に転送すれば、Kotlin側では ByteArray として扱えます。
print("MP3 Data loaded successfully (\(mp3Data.count) bytes).")
// 必要であれば、Swift内で符号付きバイト配列 ([Int8]) に変換することも可能ですが、
// 通常は Data のまま転送・使用します。
// let signedBytes: [Int8] = mp3Data.map { Int8(bitPattern: $0) }
// print("First 10 signed bytes: \(signedBytes.prefix(10))")
case .failure(let error):
print("Failed to load MP3 data: \(error)")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment