首页 文章 精选 留言 我的

精选列表

搜索[物理交互],共10005篇文章
优秀的个人博客,低调大师

Flutter WebView与JS交互简易指南

本文采用Flutter官方WebView插件:https://pub.dartlang.org/packages/webview_flutter WebView与JS互相调用是一个刚需,但是貌似现在大家写的文章讲的都不是很清楚,我这个简易指南简单粗暴地分为两部分:JS调用Flutter和Flutter调用JS,拒绝花里胡哨,保证一看就懂,一学就会。 开始之前先简单了解一下官方WebView所包含的API: onWebViewCreated:在WebView创建完成后调用,只会被调用一次; initialUrl:初始load的url; javascriptMode:JS执行模式(是否允许JS执行); javascriptChannels:JS和Flutter通信的Channel; navigationDelegate:路由委托(可以通过在

优秀的个人博客,低调大师

Rubicon —— Python 与其他语言的交互

Rubicon 是连接 Python 和其他编程语言的工具集合。 Rubicon 库现在支持: Objective C Java Objective C Rubicon-ObjC 是 Python 和 Objective-C 的桥梁,支持 iOS 和 OS X,允许你: 使用 Python 来实例化 Objective-C 中定义的对象 使用 Python 来调用 Objective-C 中定义的对象方法 使用 Python 来扩展 Objective-C 类或者子类 同时也包括一些 Core Foundation 框架关键数据类型的封装,比如 NSString 和 NSObject。 Java Rubicon-Java 是 Java 运行时环境和 Python 的桥梁,支持桌面环境和 Android 设备。允许: 实例化 Java 定义的对象 调用 Java 定义的对象方法 访问和修改 Java 定义对象的静态和实例字段 编写是使用 Python 实现 Java 定义的接口 文章转载自 开源中国社区 [http://www.oschina.net]

优秀的个人博客,低调大师

实时交互平台流程与技术分析

最近几个月一直在做基于storm的流式处理,索性整理下所有的知识点与技术知识。 一、数据准备 1、首先,我们需要用户的所有数据,使用MapReduce进行数据处理,生成业务宽表导入hbase与Redis,用于后续实时处理直接从Redis中获取相应数据,减少读写磁盘IO的消耗。 二、消息的接入 1、传入的数据是经过二进制处理的,所以使用jetty轻量级服务对传入的报文进行接入解析,同时部署多个服务,使用nginx进行负载均衡。 2、每个服务同时启动多个线程进行消息的接入,通过blockingQueue进行存储,随后进行报文解析,序列化后发送对应主题的kafka. 三、storm处理 1、使用集成的kafkaspout进行消息的接入代替storm的spout,降低工程复杂度,可直接编写bolt进行业务逻辑处理,随后进行数据的一次性过滤bolt,验证消息的正确性并并封装入对象中。 2、通过消息中的相应主键,从Redis中加载该用户的全量数据,以便后续业务处理(存入hbase是以防redis出现问题进而再查询hbase,同时hbase中的rowkey做了散列,数据均匀分布在每个region中)。 3、加载配置活动规则,这些规则通过前台web系统配置保存,存储于redis中。对多个规则进行遍历匹配,封装成一个大的对象,传入下游推送拓扑。 4、推送拓扑在接收到消息后,从对象中获取封装的消息对象的渠道对象,对其进行遍历发送至不同的渠道。

优秀的个人博客,低调大师

iOS - Swift 与 C 语言交互编程

前言 作为一种可与 Objective-C 相互调用的语言,Swift 也具有一些与 C 语言的类型和特性,如果你的代码有需要,Swift 也提供了和常见的 C 代码结构混合编程的编程方式。 1、基本数据类型 Swift 提供了一些和 C 语言的基本类型如 char,int,float,double 等价的 Swift 基本数据类型。然而,这些 Swift 的核心基本类型之间并不能隐式的相互转换,如 Int。因此,只有你的代码明确要求它们时再使用这些类型,而 Int 可以在任何你想使用它的时候使用。 C 类型 Swift 类型 bool CBool char, signed char CChar unsigned char CUnsignedChar short CShort unsigned short CUnsignedShort int CInt unsigned int CUnsignedInt long CLong unsigned long CUnsignedLong long long CLongLong unsigned long long CUnsignedLongLong wchar_t CWideChar char16_t CChar16 char32_t CChar32 float CFloat double CDouble 2、枚举 Swift 引进了用宏 NS_ENUM 来标记的任何 C 风格的枚举类型。这意味着无论枚举值是在系统框架还是在自定义的代码中定义的,当他们导入到 Swift 时,他们的前缀名称将被截断。例如,看这个 Objective-C 枚举: // Objective-C typedef NS_ENUM(NSInteger, UITableViewCellStyle) { UITableViewCellStyleDefault, UITableViewCellStyleValue1, UITableViewCellStyleValue2, UITableViewCellStyleSubtitle }; 在 Swift 中这样来实现: // Swift enum UITableViewCellStyle:Int { case Default case Value1 case Value2 case Subtitle } 当您需要指向一个枚举值时,使用以点 (.) 开头的枚举名称: // Swift let cellStyle:UITableViewCellStyle = .Default Swift 也引进了标有 NS_OPTIONS 宏选项。而选项的行为类似于引进的枚举,选项还可以支持一些位操作,如 &,| 和 ~。在 Objective-C 中,你用一个空的选项设置标示恒为零 (0)。在 Swift 中,使用 nil 代表没有任何选项。 3、指针 Swift 尽可能避免让您直接访问指针。然而,当您需要直接操作内存的时候,Swift 也为您提供了多种指针类型。下面的表使用 Type 作为占位符类型名称来表示语法的映射。 对于参数,使用以下映射: C 句法 Swift 句法 const void * CConstVoidPointer void * CConstPointer<Type> const Type * CUnsignedChar Type * CMutablePointer<Type> 对于返回类型,变量和参数类型的多层次指针,使用以下映射: C 句法 Swift 句法 void * COpaquePointer Type * UnsafePointer<Type> 对于类(class)类型,使用以下映射: C 句法 Swift 句法 Type * const * CConstPointer<Type> Type * __strong * CMutablePointer<Type> Type ** AutoreleasingUnsafePointer<Type> 1)C 可变指针: 当一个函数被声明为接受 CMutablePointer<Type> 参数时,这个函数可以接受下列任何一个类型作为参数: nil,作为空指针传入 一个 CMutablePointer<Type> 类型的值 一个操作数是 Type 类型的左值的输入输出表达式,作为这个左值的内存地址传入 一个输入输出 Type[] 值,作为一个数组的起始指针传入,并且它的生命周期将在这个调用期间被延长 如果您像这样声明了一个函数: // Swift func takesAMutablePointer(x:CMutablePointer<Float>) { /*...*/ } 那么您可以使用以下任何一种方式来调用这个函数: // Swift var x:Float = 0.0 var p:CMutablePointer<Float> = nil var a:[Float] = [1.0, 2.0, 3.0] takesAMutablePointer(nil) takesAMutablePointer(p) takesAMutablePointer(&x) takesAMutablePointer(&a) 当函数被声明使用一个 CMutableVoidPointer 参数,那么这个函数接受任何和 CMutablePointer<Type> 相似类型的 Type 操作数。 如果您这样定义了一个函数: // Swift func takesAMutableVoidPointer(x:CMutableVoidPointer) { /*...*/ } 那么您可以使用以下任何一种方式来调用这个函数: // Swift var x:Float = 0.0, y:Int = 0 var p:CMutablePointer<Float> = nil, q:CMutablePointer<Int> = nil var a:[Float] = [1.0, 2.0, 3.0], b:Int = [1, 2, 3] takesAMutableVoidPointer(nil) takesAMutableVoidPointer(p) takesAMutableVoidPointer(q) takesAMutableVoidPointer(&x) takesAMutableVoidPointer(&y) takesAMutableVoidPointer(&a) takesAMutableVoidPointer(&b) 2)C 常指针: 当一个函数被声明为接受 CConstPointer<Type> 参数时,这个函数可以接受下列任何一个类型作为参数: nil,作为空指针传入 一个 CMutablePointer<Type>,CMutableVoidPointer,CConstPointer<Type>,CConstVoidPointer,或者在必要情况下转换成 CConstPointer<Type> 的 AutoreleasingUnsafePointer<Type> 值 一个操作数是 Type 类型的左值的输入输出表达式,作为这个左值的内存地址传入 一个 Type[] 数组值,作为一个数组的起始指针传入,并且它的生命周期将在这个调用期间被延长 如果您这样定义了一个函数: // Swift func takesAConstPointer(x:CConstPointer<Float>) { /*...*/ } 那么您可以使用以下任何一种方式来调用这个函数: // Swift var x:Float = 0.0 var p:CConstPointer<Float> = nil takesAConstPointer(nil) takesAConstPointer(p) takesAConstPointer(&x) takesAConstPointer([1.0, 2.0, 3.0]) 当函数被声明使用一个 CConstVoidPointer 参数,那么这个函数接受任何和 CConstPointer<Type> 相似类型的 Type 操作数。 如果您这样定义了一个函数: // Swift func takesAConstVoidPointer(x:CConstVoidPointer) { /*...*/ } 那么您可以使用以下任何一种方式来调用这个函数: // Swift var x:Float = 0.0, y:Int = 0 var p:CConstPointer<Float> = nil, q:CConstPointer<Int> = nil takesAConstVoidPointer(nil) takesAConstVoidPointer(p) takesAConstVoidPointer(q) takesAConstVoidPointer(&x) takesAConstVoidPointer(&y) takesAConstVoidPointer([1.0, 2.0, 3.0]) takesAConstVoidPointer([1, 2, 3]) 3)自动释放不安全指针: 当一个函数被声明为接受 AutoreleasingUnsafePointer<Type> 参数时,这个函数可以接受下列任何一个类型作为参数: nil,作为空指针传入 一个 AutoreleasingUnsafePointer<Type> 值 其操作数是原始的,复制到一个临时的没有所有者的缓冲区的一个输入输出表达式,该缓冲区的地址传递给调用,并返回时,缓冲区中的值加载,保存,并重新分配到操作数。 注意:这个列表没有包含数组。 如果您这样定义了一个函数: // Swift func takesAnAutoreleasingPointer(x:AutoreleasingUnsafePointer<NSDate?>) { /*...*/ } 那么您可以使用以下任何一种方式来调用这个函数: // Swift var x:NSDate? = nil var p:AutoreleasingUnsafePointer<NSDate?> = nil takesAnAutoreleasingPointer(nil) takesAnAutoreleasingPointer(p) takesAnAutoreleasingPointer(&x) 注意:C 语言函数指针没有被 Swift 引进。 4、全局常量 在 C 和 Objective-C 语言源文件中定义的全局常量会自动地被 Swift 编译引进并做为 Swift 的全局常量。 5、预处理指令 Swift 编译器不包含预处理器。取而代之的是它充分利用了编译时属性生成配置和语言特性来完成相同的功能。因此 Swift 没有引进预处理指令。 1)简单宏 在 C 和 Objective-C,您通常使用的 #define 指令定义的一个宏常数,在 Swift,您可以使用全局常量来代替。例如: 一个全局定义 #define FADE_ANIMATION_DURATION 0.35,在 Swift可以使用 let FADE_ANIMATION_DURATION = 0.35 来更好的表述。由于简单的用于定义常量的宏会被直接被映射成 Swift 全局量,Swift 编译器会自动引进在 C 或 Objective-C 源文件中定义的简单宏。 2)复杂宏 在 C 和 Objective-C 中使用的复杂宏在 Swift 中并没有与之对应的定义。复杂宏是那些不用来定义常量的宏,而是用来定义包含小括号 () 函数的宏。您在 C 和 Objective-C 使用复杂的宏是用 来避免类型检查的限制和相同代码的重复劳动。然而,宏也会产生 Bug 和重构的困难。在 Swift 中你可以直接使用函数和泛型来达到同样的效果。因此,在 C 和 Objective-C 源文件中定义的复杂宏在 Swift 是不能使用的。 3)编译配置 Swift 代码和 Objective-C 代码以不同的方式进行条件编译。Swift 代码可以根据生成配置的评价配进行有条件的编译。生成配置包括 true 和 false 字面值,命令行标志,和下表中的平台测试函数。您可以使用 -D <#Flag#> 指定命令行标志。 函数 有效参数 os() OSX, iOS arch() x86_64, arm, arm64, i386 注意:arch(arm) 的生成配置不会为 64 位 arm 设备返回 true,当代码运行在为 32 位的 iOS 模拟器器时,arch(i386) 的生成配置返回 true。 一个简单的条件编译需要以下代码格式: #if build configuration statements #else statements #endif 一个由零个或多个有效的 Swift 语句声明的 statements,可以包括表达式,语句和控制流语句。您可以添加额外的构建配置要求,条件编译说明用 && 和 || 操作符以及 ! 操作符,添加条件控制块用 #elseif: #if build configuration && !build configuration statements #elseif build configuration statements #else statements #endif 与 C 语言编译器的条件编译相反,Swift 条件编译语句必须完全是自包含和语法有效的代码块。这是因为 Swift 代码即使没有被编译,也要全部进行语法检查。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册