iOS 2 2升级3 0 Swift 各种坑啊 Ambiguous use of 'sd_setImage 归档解档 深坑

本文记录了一次从Swift 2.2到3.0的升级过程,涉及闭包修饰符@escaping和@non-escaping、函数命名规则变化、系统属性名调整、访问控制级别更新、异步处理警告以及SDWebImage使用问题。在升级过程中遇到Ambiguous use of 'sd_setImage'的错误,并讨论了归档解档的深坑。通过15小时的努力,修复了所有问题和警告。
摘要由CSDN通过智能技术生成

  • 时隔1个月,终于下定决心把项目从2.2升级为Swift 3.0 ,花费了10左右小时,代码量有5000多一点, 本来0个警告,现在还有32个警告还没有给消除呢。

###我总结3.0与2.2区别

  • 1.闭包注意回调函数 + @escaping @escaping与@non-escaping声明用来修饰闭包的 在函数return后,闭包并不会被销毁,它被持有了。因为这个闭包要在异步请求回来后才执行,这时候函数已经return了,为了能执行,必须被其他对象持有,这里需要注意循环引用 @non-escaping:闭包在函数内执行完后,函数才返回,闭包销毁.

  • 2.函数 名字 _

///根据 用户查询 他上传的歌曲
    class func QueryUserMusicNetGet(_ user: UserModel,net:@escaping (_ objects: [AnyObject]?, _ error: NSError?) -> ()){

        //创建用户
        let user = AVObject(className: "_User", objectId: (u
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我写的代码有误。在 Unity 中,Vector3 和 Vector2 是不同的数据类型,不能直接进行加法运算。如果要将 Vector2 转换为 Vector3,可以使用 Vector3 构造函数或者 Vector3 的静态方法来实现。以下是修改后的代码: ```csharp using System.Collections; using System.Collections.Generic; using UnityEngine; public class CircleGenerator : MonoBehaviour { public int numLayers = 3; // 层数 public float circleRadius = 500f; // 圆圈的初始半径 public float circleWidth = 20f; // 圆圈的宽度 public float circleRadiusDecrement = 100f; // 每次递减的半径值 private List<LineRenderer> lineRenderers = new List<LineRenderer>(); // 存储所有 Line Renderer 组件 // Start is called before the first frame update void Start() { // 创建所有层次的圆圈 for (int i = 0; i < numLayers; i++) { CreateCircle(i); } } // 创建圆圈 void CreateCircle(int layerIndex) { // 创建新的 Line Renderer 组件 GameObject circleObject = new GameObject("Circle_" + layerIndex); LineRenderer lineRenderer = circleObject.AddComponent<LineRenderer>(); lineRenderer.positionCount = 50; lineRenderer.startWidth = circleWidth; lineRenderer.endWidth = circleWidth; // 设置圆圈的颜色 switch (layerIndex) { case 0: lineRenderer.material.color = Color.red; break; case 1: lineRenderer.material.color = Color.green; break; case 2: lineRenderer.material.color = Color.blue; break; default: lineRenderer.material.color = Color.white; break; } // 将新的 Line Renderer 组件添加到列表中 lineRenderers.Add(lineRenderer); // 计算圆圈的半径和中心点 float radius = circleRadius - layerIndex * circleRadiusDecrement; Vector3 center = transform.position; // 设置圆圈的顶点位置 for (int i = 0; i < 50; i++) { float angle = Mathf.PI * 2f * i / 50; Vector3 pos = new Vector3(Mathf.Cos(angle) * radius, Mathf.Sin(angle) * radius, 0f); lineRenderer.SetPosition(i, center + pos); } // 在上一个圆圈范围内随机下一个圆圈的位置 if (layerIndex > 0) { float prevRadius = circleRadius - (layerIndex - 1) * circleRadiusDecrement; Vector3 prevPos = lineRenderers[layerIndex - 1].GetPosition(Random.Range(0, 50)); Vector3 nextPos = prevPos + (Vector3)Random.insideUnitCircle.normalized * prevRadius * 0.5f; circleObject.transform.position = nextPos; } } } ``` 在代码中,我使用了 `(Vector3)` 将 Vector2 类型的值转换为 Vector3 类型的值。这样就可以完成向量的加法运算了。希望这次能够帮到您。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值