Как преобразовать String в Byte Array в модуле iOS проекта Kotlin Multiplatform? - PullRequest
0 голосов
/ 03 марта 2019

Это мой первый эксперимент с Kotlin Multiplatform, и кажется, что я не получил некоторые кусочки полностью.

Мой бэкэнд отправляет уведомление через сокет в UDP Multicast (мне, вероятно, нужно реализовать эту часть для каждой платформы, так как я не думаю, что Kotlin делает это для меня).Затем я хочу передать это сообщение (которое в виде массива байтов) в мой общий модуль.Этот модуль отвечает за анализ сообщения и возврат результатов на платформы.

Чтобы упростить мою работу, я хочу, чтобы каждая платформа возвращала ByteArray сообщения test.

Это мой common.kt file:

package org.kotlin.mpp.mobile

expect fun receivedEASNotification(): ByteArray

fun parseEASNotification(msg: ByteArray) {
  // Use receivedEASNotification()
}

Это файл Android:

package org.kotlin.mpp.mobile

actual fun receivedEASNotification(): ByteArray {
  return "test".toByteArray(Charsets.UTF_8)
}

Моя проблема в iOS части.Я не могу понять, как преобразовать строку в ByteArray.Есть функция toCharArray(), но нет toByteArray().Также есть функция toByte().

actual fun receivedEASNotification(): ByteArray {
  return "test".toByteArray() // There is no such a function for iOS.
}

1 Ответ

0 голосов
/ 03 марта 2019
import Foundation

// An input string.
let name = "perls"

// Get the String.UTF8View.
let bytes = name.utf8
print(bytes)

// Get an array from the UTF8View.
// ... This is a byte array of character data.
var buffer = [UInt8](bytes)

// Change the first byte in the byte array.
// The byte array is mutable.
buffer[0] = buffer[0] + UInt8(1)
print(buffer)

// Get a string from the byte array.
if let result = String(bytes: buffer, encoding: NSASCIIStringEncoding) {
    print(result)
}

ВЫХОД:

perls
[113, 101, 114, 108, 115]
qerls
...