加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门网 (https://www.xiamenwang.cn/)- 数据采集、建站、AI开发硬件、专属主机、云硬盘!
当前位置: 首页 > 教程 > 正文

什么是Scheme?居然还可以这样应用!

发布时间:2023-10-30 11:00:09 所属栏目:教程 来源:互联网
导读:   Scheme 编程语言是一种Lisp方言,诞生于1975年,由 MIT 的 Gerald J. Sussman 和 Guy L. Steele Jr. 完成。它是现代两大Lisp方言之一;另一个方言是Common Lisp。



  Scheme遵循
  Scheme 编程语言是一种Lisp方言,诞生于1975年,由 MIT 的 Gerald J. Sussman 和 Guy L. Steele Jr. 完成。它是现代两大Lisp方言之一;另一个方言是Common Lisp。
 
  Scheme遵循极简主义哲学,以一个小型语言核心作为标准,加上各种强力语言工具(语法糖)来扩展语言本身。
 
  MIT曾用Scheme作为计算机系入门课程的编程语言。计算机程序语言界著名的魔法书《计算机程序的构造和解释》(又称SICP)正是利用Scheme来解释程序设计。
 
  历史悠久的Scheme依然活跃,拥有针对各种计算机平台和环境的实现,例如Racket、Guile、MIT Scheme、Chez Scheme等。Guile是GNU工具体系里最重要的部件之一,被许多自由软件和开源软件作为内置脚本语言使用。
 
  历史与特点:
 
  Lisp 语言历史悠久,在计算机程序语言里,年龄仅次于Fortran。二十世纪五十年代,计算机科学家先是发明了针对数字计算的 Fortran 语言,后来针对符号计算,由MIT 的John McCarthy于1960年开发出了Lisp (list processing)语言。该语言起初为表处理而设计,后来广泛用于人工智能。Lisp 程序中充满了一对对嵌套的小括号,这些嵌套的符号表达式体现了递归。1994年时众多Lisp版本得到了相当的统一,统一之后的版本称为Common LISP。Common Lisp带有庞大的函数库,语言的规范长达千页以上,包括面向对象的 CLOS。
 
  Scheme语言的规范很短,总共只有50页,甚至连Common Lisp 规范的索引的长度都不到,但是却被称为是现代编程语言王国的皇后。它与以前和以后的 Lisp 实现版本都存在一些差异。现特征如下:
 
  (1)括号嵌套:Lisp 程序中充满了一对对嵌套的小括号,这些嵌套的符号体现了最基本的数学思想——递归。
 
  (2)语法简洁:Scheme语言的规范很短,总共只有50页。
 
  (3)函数编程语言
 
  一个函数(Function)是这个编程语言中所谓的第一等的公民。也就是说函式可以像一个 int 或者 float 一样被很方便的传递来传递去。这也就是所谓“Functional编程语言”中,Functional 一词的由来。
 
  (4)自动内存管理
 
  (5)支持尾递归:提高了递归效率
 
  (6)continuation
 
  (7)可移植性好
 
  Scheme开发的程序有很好的可移植性,这是由于Scheme在不同的计算机平台有相应的解释器和编译器。
 
  (8)脚本语言
 
  由于scheme语法简洁,一个Scheme解释器可以非常的小巧。Scheme可以作为脚本语言而内嵌于一些工具之中。
 
  (9)数据结构
 
  I.数字
 
  下面都是合法的数字表示方法:47,1/3,2.3,4.3e14,1+3i。
 
  II.字符
 
  字符前面需要用#\做前缀。如下面都是合法字符:#\a #\A #\b #\B #\space #\newline
 
  III.字符串:由双引号括起来的字符组成字符串。如:"A little string"
 
  IV布尔值:布尔值True和False分别用 #t 和 #f 表示。
 
  V.列表:用圆括号括起来的,可以包含任何数据类型的称为列表。如:(a little (list of) (lists))
 
  VI.数组(vector):用#为前缀,如:#(1 2 "string" #\x 5)
 
  VII.函数(或称为过程):把函数作为一种数据类型,是包括Scheme语言在内的Lisp的特色。
 
  VIII.符号
 
  符号除了不能够以数字开头的任何字符可组成符号。如:Symbols: this-is-a-symbol foo a32 c$23*4&7+3-is-a-symbol-too!
 
  IX.注释 分号开始一行注释。 如:(+ 3 1) ;return 4
 
  Scheme应用实例
 
  今天小编给大家讲解的这个例子是关于shareinstall的。我们知道,Shareinstall其实是一个APP的推广辅助工具,它主要的作用就是进行渠道统计。另外,它还提供了免填二维码、一键跳转、自动渠道打包、自动建立社区关系等功能。而scheme语言主要应用在一键跳转功能上。
 
  以IOS SDK为例,ShareInstall通过标准的scheme、universal link等技术,在app安装的情况下,从各种浏览器(微信、QQ、新浪微博、钉钉等主流社交软件的内置浏览器)唤醒 app 并传递自定义参数,避免重复安装。
 
  我们可以从universal link配置作为载体,去观察scheme的活跃性。如下:
 
  Universal link是iOS9的一个新特性,通过Universal link,App可以通过各种浏览器跳转到App(例如微信内可不通过safari,一键跳转到App),真正实现一键跳转到相应界面。 备注:iOS9以上推荐使用Universal link。
 
  (1)配置developer.apple.com的相关信息
 
  到苹果开发者中心,为当前的App ID开启Associated Domains服务:
 
  (2)配置Xcode
 
  在Xcode中配置ShareInstall为当前应用生成的关联域名:Associated Domains 开关打开,添加 Domains:applinks:f6bkarebhf22eb.shareinstall.com
 
  在AppDelegate中的continueUserActivity方法中调用,用来处理Universal link。
 
  //Universal Links 通用链接
 
  (BOOL)application:(UIApplication )application continueUserActivity:(NSUserActivity )userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
 
  {
 
  //判断是否通过ShareInstall Universal Links 唤起App
 
  if ([ShareInstallSDK continueUserActivity:userActivity]) {
 
      return YES ;
 
  }else{
 
      //其他代码
 
      return YES;
 
  }
 
  复制代码
 
  }
 
  (3)配置App的URL Scheme
 
  iOS系统中App之间是相互隔离的,通过URL Scheme, App之间可以相互调用,并且可以传递参数。 备注:iOS9以下通过Url Scheme实现拉起。
 
  (4) 在Xcode里选中Target—Info—URL Types, 配置shareInstall为当前应用生成的Url Scheme,如图所示:
 
  identifier 配置为 com.ShareInstall,URL Schemes从shareInstall获取(dekf0466)。 注:identifier 一定要配置为com.ShareInstall
 
  (5) URL Scheme相关代码配置
 
  注意:当需要在shareInstall这个方法中处理第三方回调的时候(比如支付宝、微信回调等),请注意区分。
 
  //iOS9以下 URI Scheme
 
  -(BOOL)application:(UIApplication )application openURL:(NSURL )url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
 
  //判断是否通过ShareInstall URL Scheme 唤起App
 
  if ([ShareInstallSDK handLinkURL:url]) {
 
       return YES;
 
  }else{
 
      //其他代码
 
      return YES;
 
  }
 
  return YES;
 
  复制代码
 
  }
 
  //iOS9以上 URL Scheme
 
  (BOOL)application:(UIApplication )app openURL:(NSURL )url options:(nonnull NSDictionary *)options
 
  {
 
  //判断是否通过ShareInstall URL Scheme 唤起App
 
  if ([ShareInstallSDK handLinkURL:url]) {
 
      return YES;
 
  }else{
 
      //其他代码
 
      return YES;
 
  }
 
  return YES;
 
  复制代码
 
  }
 
  (6)获取唤醒参数,直达具体页
 
  通过在url中附带具体的参数,唤醒app并跳转到具体页。
 
  (void)getWakeUpParamsFromSmartInstall: (id) params withError: (NSError *) error{
 
  NSLog(@"唤醒参数params=%@",params);
 
  UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL shceme 进来的" message:[self DataTOjsonString:params] delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
 
  //弹出提示框(便于调试,调试完成后删除此代码)
 
  [alert show];
 
  }
 
  (7) 其他代码配置
 
  如果做测试,获取参数,则必须在Appdelegate.h加上如下测试代码。
 
  #pragma mark 将oc数据类型转成NSString
 
  -(NSString *)DataTOjsonString:(id)object
 
  {
 
  if (!object) {
 
      return null;
 
  }
 
  NSString *jsonString = null;
 
  NSError *error;
 
  NSData *jsonData = [NSJSONSerialization dataWithJSONObject:object
 
                                                     options:NSJSONWritingPrettyPrinted
 
                                                       error:&error];
 
  if (! jsonData) {
 
      NSLog(@"Got an error: %@", error);
 
  } else {
 
  复制代码
 
  jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
 
  }
 
  return jsonString;
 
  复制代码
 
  }
 
  一键跳转的优势
 
  通过 URL Scheme 和 Universal Links 实现了在不同浏览器中拉起APP。这样Shareinstall SDK就减少了应用的代码冗余,提供了通用的一键拉起接口,使用户有了更加舒适的体验,同时给移动开发者对自己产品的管理和推广,也提供了便利。
 

(编辑:厦门网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章