如何实现类似UIColor的点语法传参?给方法传递静态字符串值
嘿,你说的这个写法在Swift里太常见啦!它叫做静态成员表达式(Static Member Expression),核心就是利用枚举或者自定义结构体的静态成员,配合Swift强大的类型推断,实现像UIColor.clear那样简洁的点语法调用。我给你两种最常用的实现方式:
方式一:用枚举实现(最推荐,语义清晰)
枚举天生适合这种“固定可选值”的场景,直接把你的字符串值作为枚举的原始值定义:
// 定义枚举,指定原始值类型为String enum MyType: String { case value1 = "moobs" case value2 = "notMoobs" } // 定义你的方法,参数类型设为这个枚举 func myMethod(myType: MyType) { // 可以通过rawValue拿到对应的字符串 print("当前选中的类型:\(myType.rawValue)") }
调用的时候,因为Swift能从方法参数类型自动推断出.value1属于MyType,所以直接写点语法就行:
myMethod(myType: .value1) // 等价于MyType.value1 myMethod(myType: .value2)
方式二:用结构体的静态属性实现
如果不想用枚举,也可以用自定义结构体封装静态属性,模拟这种写法:
// 定义结构体,内部封装静态属性 struct MyType { let rawValue: String // 定义静态属性,返回结构体实例 static let value1 = MyType(rawValue: "moobs") static let value2 = MyType(rawValue: "notMoobs") } // 方法参数类型设为MyType func myMethod(myType: MyType) { print("当前值:\(myType.rawValue)") }
调用时同样可以用简洁的点语法:
myMethod(myType: .value1)
为什么能这么写?
这全靠Swift的类型推断机制:当方法的参数类型明确是MyType时,编译器会自动识别.value1就是MyType.value1的简写,所以你可以省略类型名直接用点语法调用,和UIColor.clear的原理完全一致。
内容的提问来源于stack exchange,提问作者bj97301
相关产品推荐
相关产品推荐

