美文网首页iOS 知识点
一周技术回顾(2020.9.11)

一周技术回顾(2020.9.11)

作者: 起名字让我很头疼 | 来源:发表于2020-09-11 16:49 被阅读0次

    iOS 小知识

    分享一个比较常用的知识点,点击某个UITableViewCell不执行-[UITableView didSelectRowAtIndexPath:]方法的几种方式:

    1.可以直接设置cell.userInteractionEnabled = NO;

    2.可以实现UITableViewDelegate中的-[UITableView shouldHighlightRowAtIndexPath:]方法,设置对应indexPath返回NO;

    3.可以实现UITableViewDelegate中的-[UITableView willSelectRowAtIndexPath:]方法,设置对应indexPath返回nil,不过这种方式cell还是会有高亮效果,需要手动设置对应cell.selectionStyle = UITableViewCellSelectionStyleNone;

    以上三个方法,都不会进UITableViewDelegate的-[UITableView didSelectRowAtIndexPath:]方法。

    用第一种方式设置后,cell上的所有子View都不能被点击了;

    而第二种方式不会影响cell的子View的响应事件的传递,如果cell上有UIControl的子类,依然可以被点击;

    第三种方式也不会影响cell的子视图的响应事件,但是需要额外设置不显示高亮效果。当然,你也可以在-[UITableView didSelectRowAtIndexPath:]方法的对应indexPath直接return.

    Swift学习 Tips 1

    带有嵌套类型的命名空间

    图1

    代码出处: Namespacing with nested types

    什么是嵌套类型

    嵌套类型是指在某个类型中定义新的枚举,类或者结构体类型,这两个类型之间是嵌套的关系.

    具体来说,要在一个类型中嵌套另一个类型,将嵌套类型的定义写在其外部类型的 {} 内,而且可以根据需要定义多级嵌套

    那么图示中的 Map 结构体中包含了两个嵌套定义的结构体(Model,Position)和两个嵌套定义的枚举(Direction,Size)

    什么是命名空间

    命名空间的定义:是表示着一个标识符的可见范围,一个标识符可以在多个空间内定义,但是它在不同空间内的含义确不相同,而且互不想干,这样在一个新的命名空间内定义任意的标识符,这个标识符不会与任何已有的标识符产生冲突,因为它们属于不同的命名空间.

    例如:A公司员工a的工号为"123",B公司员工b的工号也为"123",但是由于两个人在不同的公司.使用相同的工号来标识并不会产生影响.A和B两个公司就是两个独立的命名空间.

    Swift中的嵌套类型和命名空间又有什么联系呢?

    在Swift中并没有所谓的命名空间,但是可以通过嵌套类型,可以实现相同的效果,如:图2

    图2

    SchoolA.ClassSchoolB.Class可以区分不同School中的Class类型.

    示例代码分析

    图1中的代码是不完整的,从代码中可以看出并没有定义Terrain等类型,但是这里声明了terrain 变量是一个字典类型,它的 key 是 Position 类型,它的 value 是 Terrain.Model 类型.

    字典类型的简化语法有2中,一种是 Dictionary<Key, Value> ,一种就是 [Key: Value].

    还有我们看到了这段代码中定义了一个字符串类型的枚举enum Size:String 这个是在OC当中是不存在的,这里参考内容枚举,里面有详细的介绍,非常厉害的Swift,非常神奇.

    Swift学习 控件推荐

    Fluid Slider

    Ramotion 出品的滑动控件,带有弹出式气泡的滑块小部件。

    下周推出使用方法和使用详情

    相关文章

      网友评论

        本文标题:一周技术回顾(2020.9.11)

        本文链接:https://www.haomeiwen.com/subject/frwtrttx.html