import Foundation

func toHex<T:UnsignedInteger>(_ val:T)->String{
return String(("0000000000000000"+String(val,radix:16)).characters.suffix(2*MemoryLayout<T>.size))
}

var d = Data(bytes: Array<UInt8>(0...250)) // making dummy data

for i in stride(from:0, to:d.count, by:16) {
print(toHex(UInt(i))+d[i...min(i+16,d.count)-1].reduce(":"){$0+" "+toHex($1)})
}

表示1行分ずつアクセスした方がif文とか不要で簡単
これでfor文内1行
あと、この方がキャラクター表示とかの拡張もやりやすいと思う

データはファイルアクセスが面倒臭かったので、コード内で連番で生成