知道Vue为什么要放弃 $ 语法糖提案么?Swift ABI稳定性探究 | 每日掘金第 216 期

1,347 阅读6分钟

Hello,欢迎来到每日掘金时间。每日掘金专注于发掘站内优质创作者和优质内容,欢迎大家多提宝贵意见!

本文字数 1800+,阅读时间大约需要 6 分钟。

  • 【本期每日掘金】亮点:
  • 想到头秃也想不到,Vue3复用组件还可以这么hack
  • 你到底懂不懂 Transition 组件?
  • CesiumJS 源码杂谈 - 从光到 Uniform
  • 麻了,不要再动不动就BeanUtil.copyProperties!!!
  • 深入理解NIO三大组件:buffer、channel、selector
  • Android进阶宝典 -- 数据存储优化
  • ……

筛选规则:文章发布时间在本期「每日掘金」发布时间的 1-3 天内,且符合社区推荐标准,也会同步发布在掘金相关技术社群。

今日主理人

本期每日掘金由  丘山子  负责制作,需要投稿每日掘金请私信我的助理 小岳

PS:主理人目前正在招募中,有感兴趣的掘友们可以联系Captain

每日干货

主理人们会对近期(1-3 天)社区深度技术好文进行挖掘和筛选,优质的技术文章有机会出现在下方列表,排名不分先后。

『前端』

<Transition> 作为一个 Vue 中的内置组件,它可以将 进入动画离开动画 应用到通过 默认插槽 传递给目标元素或组件上。

也许你有在使用,但是一直不清楚它的原理或具体实现,甚至不清楚其内部提供的各个 class 到底怎么配合使用,想看源码又被其中各种引入搞得七荤八素...

本篇文章就以 Transition 组件为核心,探讨其核心原理的实现,文中不会对其各个属性再做额外解释,毕竟这些看文档就够了,希望能够给你带来帮助!!!

之前对实时渲染(RealTimeRendering)的殿堂就十分向往,也有简单了解过实时渲染中的光,无奈一直没能系统学习。鉴于笔者已经有一点 CesiumJS 源码基础,所以就抽了一个周末跟了跟 CesiumJS 中的光照初步,在简单的代码追踪后,发现想系统学习光照材质,仍然是需要 RTR 知识的,这次仅仅了解了光在 CesiumJS 底层中是如何从 API 传递到 WebGL 着色器中去的,为之后深入研究打下基础。

『后端』

本文的选题来源于一周前我的一次崩溃,当时各种压力和工作把我整的不行了,让我在短时间内改另一个同事写的代码。本来以为是一次简单的叠叠乐,没想到随便看了眼之前的代码,发现历史需求没写完,而且逻辑还有错,当时直接蚌埠住了。我的IDEA比较新,平时看着报错我都会去手动改一下,有时候我看着同事的代码一片黄,总是忍不住要改。久而久之也烦了,不明白为什么这么明显的BUG还能放在上面,于是产生了来一期盘点的想法。排名不分先后,上榜各凭本事,客官们,上菜咯!

最近项目上要求升级一个工具包hutool的版本,以解决安全漏洞问题,这不升级还好,一升级反而捅出了更大的篓子,究竟是怎么回事呢?

今天主要介绍Spring @Import注解,在Spring中@Import使用得比较频繁,它得作用是导入bean,具体的导入方式有多种,特别在SpringBoot项目中,很多地方都使用到了@Import注解,特别对于一些和SpringBoot整合的组件,其实现都大量使用了@Import,例如使用Feign集成SpringBoot时会加上注解@EnableFeignClients,使用Dubbo时会使用@EnableDubbo等,这些注解里面都使用了@Import注解来注册一些bean。

『移动端』

此次 Transform API 将在 AGP 8.0 移除,这一改动对于目前一些常用的类库、插件都将面临一个适配的问题,常见的如路由、服务注册、字符串加密等插件都广泛使用了Transform API。那么究竟该怎么解决此类适配问题找到平替方案呢?本篇将探讨目前主流的一些观点是否能够满足需求以及如何真正的做到适配。

ASM 从组成结构上可以分成两部分,一部分为Core API,另一部分为Tree API

  • Core API 包括asm.jarasm-util.jarasm-commons.jar
  • Tree API 包括 asm-tree.jarasm-analysis.jar

本文主要讲解Tree API 的相关使用。

如果低版本开启了 BUILD_LIBRARY_FOR_DISTRIBUTION = YES会有Runtime方面的影响,为了以后二进制的演进,就需要修改技术方案或者提高最低iOS版本限制了。

在之前的版本中实现逻辑是

 class func addRouter(_ patternString: String, classString: String) {
      let clz: AnyClass? = classString.trimmingCharacters(in: CharacterSet.whitespaces).la_matchClass()
       if let routerable = clz as? LARouterable.Type {
          self.addRouter(patternString.trimmingCharacters(in: CharacterSet.whitespaces), handle: routerable.registerAction)
       } else {
          assert(clz as? LARouterable.Type != nil, "register router error, please implementation the LARouterable Protocol")
       }
  }

这里主要是从通过协议找到类,再根据类找到实现的 registerAction方法获取实例方法,我们可以通过外部传入registerAction的方式即可解决这其中的无法找到遵循协议类与registerAction获取实例的相关逻辑。

因为所有的路由组件,不管是Objective-C还是Swift,核心的实现逻辑都是 NSClassFromString ,所以我们暂时回退了该选项。待用户OS版本13.0 的比例上升到95%的比例之后,统一升级最低版本限制,开启该选项。

趣味码上掘金分享

作者简介
wangpeng1478裸眼3D轮播图

📖 投稿专区

大家可以在评论区推荐认为不错的文章,并附上链接和推荐理由,有机会登上下一期。文章创建日期必须在近 1-3 天内;可以推荐自己的文章、也可以推荐他人的文章。