Kotlin-native: String <=> NSData conversion

Created on 27 Sep 2018  路  4Comments  路  Source: JetBrains/kotlin-native

Hi,

currently, as i do not found how to implement it in Kotlin, i've a a swift framework included as a library.
this framework just do conversion from NSData to String and... String to NSData like this:

String(data: data, encoding: .utf8)
str.data(using: .utf8)

i would like to implement it directly with Kotlin, how can i achieve that?

Most helpful comment

@SBNTT
Have you tried using Objective-C variants of the same methods through Objective-C interop?

(str as NSString).dataUsingEncoding(NSUTF8StringEncoding)!!
NSString.create(data, NSUTF8StringEncoding) as String

All 4 comments

@SBNTT
Have you tried using Objective-C variants of the same methods through Objective-C interop?

(str as NSString).dataUsingEncoding(NSUTF8StringEncoding)!!
NSString.create(data, NSUTF8StringEncoding) as String

Excellent,
thanks @SvyatoslavScherbina !

There is a shorthand to make it more confortable to use

@Suppress("CAST_NEVER_SUCCEEDS")
fun String.nsdata(): NSData? {
    return (this as NSString).dataUsingEncoding(NSUTF8StringEncoding)
}

fun NSData.string(): String? {
    return NSString.create(this, NSUTF8StringEncoding) as String?
}

and use it like this:

val data: NSData? = "fsdfsdfsfsdf".nsdata()
val str: String? = data.string()

No need to suppress class cast:

fun String.nsdata(): NSData? =
    NSString.create(string = this).dataUsingEncoding(NSUTF8StringEncoding)

fun NSData.string(): String? =
    NSString.create(data = this, encoding = NSUTF8StringEncoding)?.toString()
Was this page helpful?
0 / 5 - 0 ratings

Related issues

9468305 picture 9468305  路  3Comments

AregevDev picture AregevDev  路  3Comments

msink picture msink  路  4Comments

Cortlandd picture Cortlandd  路  4Comments

alastaircoote picture alastaircoote  路  3Comments