当前位置: 首页 > news >正文

合肥门户网站有哪些网络营销的方式有十种

合肥门户网站有哪些,网络营销的方式有十种,wordpress文章分享到微信,电商网站开发技术目标:通过本教程学习如何使用 Kotlin Multiplatform Library 创建多平台分发库(iOS,安卓)。 创建一个项目 1、本教程使用的是Android Studio创建 2、选择 新建工程,选择 Kotlin Multiplatform Library 3、点击next 输入需要创建的项目名称以…

目标:通过本教程学习如何使用 Kotlin Multiplatform Library 创建多平台分发库(iOS,安卓)。

创建一个项目

1、本教程使用的是Android Studio创建
2、选择 新建工程,选择 Kotlin Multiplatform Library
3、点击next 输入需要创建的项目名称以及存放的位置
4、点击next,输入要创建的库的名称,默认shared
建议都选上 测试单元。
在这里插入图片描述

在这里插入图片描述

到这项目基本创建完毕,开始进入编写分发库代码阶段。

编写跨平台代码

定义要在公共代码中实现的类和接口
1、在公共模块中创建一个目录 org.jetbrains.base64 用来存放编写代码
2、在新建目录下面创建 Base64.kt 文件
3、在新创建的的文件中定义 Base64Encoder 将字节转换为 Base64格式的接口

package org.jetbrains.base64interface Base64Encoder {fun encode(src: ByteArray): ByteArray
}

4、定义对象 Base64Factory 作为公共代码 以提供接口实现实例 Base64Encoder的方式

expect object Base64Factory {fun createEncoder(): Base64Encoder
}

expext 是在跨平台代码中用到的关键字,被expext 关键字修饰的Base64Factory对象 。对于需要分发的平台,需要使用关键字 actual 关键字予以实现。

此时项目应该会爆红,因为在公共模块中使用关键字 expect 创建了对象,对应的分发平台还没实现,这时需要一一进行实现

提供对应平台代码实现

安卓平台
1、找到安卓模块在模块下面创建一个 org.jetbrains.base64 的新包
2、在新包里面创建 Base64.kt 文件
3、使用关键字 actual 实现公共模块声明的 Base64Factory对象方法

package com.example.myapplication.org.jetbrains.base64import android.annotation.TargetApi
import android.os.Build
import java.util.*actual object Base64Factory {actual fun createEncoder(): Base64Encoder = JvmBase64Encoder
}object JvmBase64Encoder : Base64Encoder {@TargetApi(Build.VERSION_CODES.O)override fun encode(src: ByteArray): ByteArray = Base64.getEncoder().encode(src)}

写到这安卓的代码以好,应为安卓可以直接使用api进行转换。

iOS平台

iOS在这方面比较吃亏没有现成的东西可以用,需要自己实现。
1、找到iOS模块,在模块下面创建一个org.jetbrains.base64包
2、在新包下面创建一个 Base64.kt文件
3、实现公共模块的代码

package com.example.myapplication.org.jetbrains.base64private val BASE64_ALPHABET: String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
private val BASE64_MASK: Byte = 0x3f
private val BASE64_PAD: Char = '='
private val BASE64_INVERSE_ALPHABET = IntArray(256) {BASE64_ALPHABET.indexOf(it.toChar())
}private fun Int.toBase64(): Char = BASE64_ALPHABET[this]actual object Base64Factory {actual fun createEncoder(): Base64Encoder = NativeBase64Encoder
}object NativeBase64Encoder : Base64Encoder {// encode(src: ByteArray): ByteArrayoverride fun encode(src: ByteArray): ByteArray {fun ByteArray.getOrZero(index: Int): Int = if (index >= size) 0 else get(index).toInt()// 4n / 3 is expected Base64 payloadval result = ArrayList<Byte>(4 * src.size / 3)var index = 0while (index < src.size) {val symbolsLeft = src.size - indexval padSize = if (symbolsLeft >= 3) 0 else (3 - symbolsLeft) * 8 / 6val chunk = (src.getOrZero(index) shl 16) or (src.getOrZero(index + 1) shl 8) or src.getOrZero(index + 2)index += 3for (i in 3 downTo padSize) {val char = (chunk shr (6 * i)) and BASE64_MASK.toInt()result.add(char.toBase64().code.toByte())}// Fill the pad with '='repeat(padSize) { result.add(BASE64_PAD.code.toByte()) }}return result.toByteArray()}}

到此,公共模块,安卓模块以及iOS模块代码已经编写完毕。可以在测试类中测试刚才编写的代码。

在先写之前,将 encodeToString 方法添加到 默认实现Base64Encoder 的接口中,该方法 将字节数组转换成字符串,方便测试。

interface Base64Encoder {fun encode(src: ByteArray): ByteArrayfun encodeToString(src: ByteArray): String {val encoded = encode(src)return buildString(encoded.size) {encoded.forEach { append(it.toInt().toChar()) }}}}

公共模块

object JvmBase64Encoder : Base64Encoder {@TargetApi(Build.VERSION_CODES.O)override fun encode(src: ByteArray): ByteArray = Base64.getEncoder().encode(src)@TargetApi(Build.VERSION_CODES.O)override fun encodeToString(src: ByteArray): String = Base64.getEncoder().encodeToString(src)
}

安卓模块

object NativeBase64Encoder : Base64Encoder {// encode(src: ByteArray): ByteArrayoverride fun encode(src: ByteArray): ByteArray {fun ByteArray.getOrZero(index: Int): Int = if (index >= size) 0 else get(index).toInt()// 4n / 3 is expected Base64 payloadval result = ArrayList<Byte>(4 * src.size / 3)var index = 0while (index < src.size) {val symbolsLeft = src.size - indexval padSize = if (symbolsLeft >= 3) 0 else (3 - symbolsLeft) * 8 / 6val chunk = (src.getOrZero(index) shl 16) or (src.getOrZero(index + 1) shl 8) or src.getOrZero(index + 2)index += 3for (i in 3 downTo padSize) {val char = (chunk shr (6 * i)) and BASE64_MASK.toInt()result.add(char.toBase64().code.toByte())}// Fill the pad with '='repeat(padSize) { result.add(BASE64_PAD.code.toByte()) }}return result.toByteArray()}// encodeToString(src: ByteArray): Stringoverride fun encodeToString(src: ByteArray): String {return super.encodeToString(src)}}

iOS 模块

至此,用于测试转换以及各模块代码已经编写完毕。剩下的就是便携测试模块代码。

http://www.hkea.cn/news/522262/

相关文章:

  • 网站建设服务公司选哪家比较好?苏州优化收费
  • 中国建设银行河南省分行网站推广信息哪个平台好
  • 网站建设官网免费模板杭州seo优化
  • 绍兴网站建设谷歌搜索引擎在线
  • 网站的会员认证怎么做黑龙江新闻头条最新消息
  • 做网站如何分工百度推广登录平台客服
  • 网站建设如何提案万网域名注册信息查询
  • 创意二维码制作网站企业网络营销推广案例
  • 论坛型网站怎么做百度高级检索入口
  • 做百度移动网站排搜素引擎优化
  • 公司创建一个网站需要多少钱想做百度推广找谁
  • 做文献ppt模板下载网站有哪些常德政府网站
  • 青岛网站建设公司排行外链工具在线
  • 网站怎么做显得简洁美观seo数据是什么意思
  • 阿里巴巴开通诚信通后网站怎么做网络优化网站
  • 东莞手机网站价格便宜个人免费建站软件
  • 电子商务网站建设的步骤一般为百度100%秒收录
  • 做企业网站怎么样免费的推广软件下载
  • 拓普网站建设美国搜索引擎
  • 网站开发者工资冯耀宗seo视频教程
  • 软件开发各阶段工作量比例搜索引擎优化的基础是什么
  • 网站怎么做才能将名声打响云搜索app
  • 南阳做网站优化哪家好一级域名生成二级域名
  • 3322动态域名官网郑州seo联系搜点网络效果好
  • 网络营销渠道的类型河北seo基础教程
  • 做微信网站多少钱seo内部优化包括哪些内容
  • 中国城乡建设网站网络优化公司排名
  • 个人网站做淘宝客教程torrentkitty磁力搜索引擎
  • 广州北京网站建设seo培训讲师招聘
  • 手机上免费自己做网站网络营销案例分享