无法将String赋值给CAMediaTimingFillMode类型问题求助
解决方法
问题核心是类型不匹配:group.fillMode需要CAMediaTimingFillMode类型,但MotionAnimationFillModeToValue(mode: .both)返回的是String类型,直接赋值会报错。Xcode的自动修复建议错误地将赋值语句嵌套进初始化参数,导致循环引用,不能采用。
正确的写法是先获取MotionAnimationFillModeToValue返回的字符串,再用它初始化CAMediaTimingFillMode,同时提供默认值避免nil:
public class func animate(group animations: [CAAnimation], timingFunction: CAMediaTimingFunction = .easeInOut, duration: CFTimeInterval = 0.5) -> CAAnimationGroup { let group = CAAnimationGroup() // 正确转换类型 let fillModeString = MotionAnimationFillModeToValue(mode: .both) group.fillMode = CAMediaTimingFillMode(rawValue: fillModeString) ?? .both group.isRemovedOnCompletion = false group.animations = animations group.duration = duration group.timingFunction = timingFunction return group }
补充说明
CAMediaTimingFillMode(rawValue:)会尝试将字符串转换为对应的枚举值,如果字符串不匹配(比如拼写错误),会返回nil,所以需要用??指定一个默认的填充模式(这里用.both和你的原需求一致)。- 确保
MotionAnimationFillModeToValue(mode: .both)返回的字符串是CAMediaTimingFillMode的有效rawValue(比如".both"对应.both,".forwards"对应.forwards等),否则默认值会生效。
内容的提问来源于stack exchange,提问作者Stephen Botta
相关产品推荐
相关产品推荐

