Functions
The following functions are available globally.
-
Undocumented
Declaration
Objective-C
CG_INLINE void AddAccessibilityLabel(NSObject *obj, NSString *label) { obj.accessibilityLabel = label; }
Swift
func AddAccessibilityLabel(_ obj: NSObject!, _ label: String!)
-
Undocumented
Declaration
Objective-C
CG_INLINE void AddAccessibilityHint(NSObject *obj, NSString *hint) { obj.accessibilityHint = hint; }
Swift
func AddAccessibilityHint(_ obj: NSObject!, _ hint: String!)
-
根据给定的 getter selector 获取对应的 setter selector
Declaration
Objective-C
static inline SEL setterWithGetter(SEL getter)
Swift
func setterWithGetter(_ getter: Selector!) -> Selector!
Parameters
getter
目标 getter selector
Return Value
对应的 setter selector
-
某些地方可能会将 CGFLOAT_MIN 作为一个数值参与计算(但其实 CGFLOAT_MIN 更应该被视为一个标志位而不是数值),可能导致一些精度问题,所以提供这个方法快速将 CGFLOAT_MIN 转换为 0 issue: https://github.com/Tencent/QMUI_iOS/issues/203
Declaration
Objective-C
static inline CGFloat removeFloatMin(CGFloat floatValue)
Swift
func removeFloatMin(_ floatValue: CGFloat) -> CGFloat
-
基于指定的倍数,对传进来的 floatValue 进行像素取整。若指定倍数为0,则表示以当前设备的屏幕倍数为准。
例如传进来 “2.1”,在 2x 倍数下会返回 2.5(0.5pt 对应 1px),在 3x 倍数下会返回 2.333(0.333pt 对应 1px)。
Declaration
Objective-C
static inline CGFloat flatSpecificScale(CGFloat floatValue, CGFloat scale)
Swift
func flatSpecificScale(_ floatValue: CGFloat, _ scale: CGFloat) -> CGFloat
-
基于当前设备的屏幕倍数,对传进来的 floatValue 进行像素取整。
注意如果在 Core Graphic 绘图里使用时,要注意当前画布的倍数是否和设备屏幕倍数一致,若不一致,不可使用 flat() 函数,而应该用 flatSpecificScale
Declaration
Objective-C
static inline CGFloat flat(CGFloat floatValue)
Swift
func flat(_ floatValue: CGFloat) -> CGFloat
-
类似flat(),只不过 flat 是向上取整,而 floorInPixel 是向下取整
Declaration
Objective-C
static inline CGFloat floorInPixel(CGFloat floatValue)
Swift
func floorInPixel(_ floatValue: CGFloat) -> CGFloat
-
Undocumented
Declaration
Objective-C
CG_INLINE BOOL between(CGFloat minimumValue, CGFloat value, CGFloat maximumValue) { return minimumValue < value && value < maximumValue; }
Swift
func between(_ minimumValue: CGFloat, _ value: CGFloat, _ maximumValue: CGFloat) -> Bool
-
Undocumented
Declaration
Objective-C
CG_INLINE BOOL betweenOrEqual(CGFloat minimumValue, CGFloat value, CGFloat maximumValue) { return minimumValue <= value && value <= maximumValue; }
Swift
func betweenOrEqual(_ minimumValue: CGFloat, _ value: CGFloat, _ maximumValue: CGFloat) -> Bool
-
调整给定的某个 CGFloat 值的小数点精度,超过精度的部分按四舍五入处理。
例如 CGFloatToFixed(0.3333, 2) 会返回 0.33,而 CGFloatToFixed(0.6666, 2) 会返回 0.67
Warning
参数类型为 CGFloat,也即意味着不管传进来的是 float 还是 double 最终都会被强制转换成 CGFloat 再做计算Warning
该方法无法解决浮点数精度运算的问题,如需做浮点数的 == 判断,可用下方的 CGFloatEqualToFloat()Declaration
Objective-C
static inline CGFloat CGFloatToFixed(CGFloat value, NSUInteger precision)
Swift
func CGFloatToFixed(_ value: CGFloat, _ precision: UInt) -> CGFloat
-
将给定的两个 CGFloat 进行等值比较,并通过参数 precision 指定要考虑的小数点后的精度,内部会将浮点数转成整型,从而避免浮点数精度导致的 == 判断错误。 例如 CGFloatEqualToFloatWithPrecision(1.000, 0.999, 0) 会返回 YES,但 1.000 == 0.999 会得到 NO。
Declaration
Objective-C
static inline BOOL CGFloatEqualToFloatWithPrecision(CGFloat value1, CGFloat value2, NSUInteger precision)
Swift
func CGFloatEqualToFloatWithPrecision(_ value1: CGFloat, _ value2: CGFloat, _ precision: UInt) -> Bool
-
将给定的两个 CGFloat 进行等值比较,不考虑小数点后的数值。 例如 CGFloatEqualToFloat(1.000, 0.999) 会返回 YES,但 1.000 == 0.999 会得到 NO。
Declaration
Objective-C
static inline BOOL CGFloatEqualToFloat(CGFloat value1, CGFloat value2)
Swift
func CGFloatEqualToFloat(_ value1: CGFloat, _ value2: CGFloat) -> Bool
-
用于居中运算
Declaration
Objective-C
static inline CGFloat CGFloatGetCenter(CGFloat parent, CGFloat child)
Swift
func CGFloatGetCenter(_ parent: CGFloat, _ child: CGFloat) -> CGFloat
-
检测某个数值如果为 NaN 则将其转换为 0,避免布局中出现 crash
Declaration
Objective-C
static inline CGFloat CGFloatSafeValue(CGFloat value)
Swift
func CGFloatSafeValue(_ value: CGFloat) -> CGFloat
-
两个point相加
Declaration
Objective-C
static inline CGPoint CGPointUnion(CGPoint point1, CGPoint point2)
Swift
func CGPointUnion(_ point1: CGPoint, _ point2: CGPoint) -> CGPoint
-
获取rect的center,包括rect本身的x/y偏移
Declaration
Objective-C
static inline CGPoint CGPointGetCenterWithRect(CGRect rect)
Swift
func CGPointGetCenterWithRect(_ rect: CGRect) -> CGPoint
-
Undocumented
Declaration
Objective-C
CG_INLINE CGPoint CGPointToFixed(CGPoint point, NSUInteger precision) { CGPoint result = CGPointMake(CGFloatToFixed(point.x, precision), CGFloatToFixed(point.y, precision)); return result; }
Swift
func CGPointToFixed(_ point: CGPoint, _ precision: UInt) -> CGPoint
-
Undocumented
Declaration
Objective-C
CG_INLINE CGPoint CGPointRemoveFloatMin(CGPoint point) { CGPoint result = CGPointMake(removeFloatMin(point.x), removeFloatMin(point.y)); return result; }
Swift
func CGPointRemoveFloatMin(_ point: CGPoint) -> CGPoint
-
获取UIEdgeInsets在水平方向上的值
Declaration
Objective-C
static inline CGFloat UIEdgeInsetsGetHorizontalValue(UIEdgeInsets insets)
Swift
func UIEdgeInsetsGetHorizontalValue(_ insets: UIEdgeInsets) -> CGFloat
-
获取UIEdgeInsets在垂直方向上的值
Declaration
Objective-C
static inline CGFloat UIEdgeInsetsGetVerticalValue(UIEdgeInsets insets)
Swift
func UIEdgeInsetsGetVerticalValue(_ insets: UIEdgeInsets) -> CGFloat
-
将两个UIEdgeInsets合并为一个
Declaration
Objective-C
static inline UIEdgeInsets UIEdgeInsetsConcat(UIEdgeInsets insets1, UIEdgeInsets insets2)
Swift
func UIEdgeInsetsConcat(_ insets1: UIEdgeInsets, _ insets2: UIEdgeInsets) -> UIEdgeInsets
-
Undocumented
Declaration
Objective-C
CG_INLINE UIEdgeInsets UIEdgeInsetsSetTop(UIEdgeInsets insets, CGFloat top) { insets.top = flat(top); return insets; }
Swift
func UIEdgeInsetsSetTop(_ insets: UIEdgeInsets, _ top: CGFloat) -> UIEdgeInsets
-
Undocumented
Declaration
Objective-C
CG_INLINE UIEdgeInsets UIEdgeInsetsSetLeft(UIEdgeInsets insets, CGFloat left) { insets.left = flat(left); return insets; }
Swift
func UIEdgeInsetsSetLeft(_ insets: UIEdgeInsets, _ left: CGFloat) -> UIEdgeInsets
-
Undocumented
Declaration
Objective-C
CG_INLINE UIEdgeInsets UIEdgeInsetsSetBottom(UIEdgeInsets insets, CGFloat bottom) { insets.bottom = flat(bottom); return insets; }
Swift
func UIEdgeInsetsSetBottom(_ insets: UIEdgeInsets, _ bottom: CGFloat) -> UIEdgeInsets
-
Undocumented
Declaration
Objective-C
CG_INLINE UIEdgeInsets UIEdgeInsetsSetRight(UIEdgeInsets insets, CGFloat right) { insets.right = flat(right); return insets; }
Swift
func UIEdgeInsetsSetRight(_ insets: UIEdgeInsets, _ right: CGFloat) -> UIEdgeInsets
-
Undocumented
Declaration
Objective-C
CG_INLINE UIEdgeInsets UIEdgeInsetsToFixed(UIEdgeInsets insets, NSUInteger precision) { UIEdgeInsets result = UIEdgeInsetsMake(CGFloatToFixed(insets.top, precision), CGFloatToFixed(insets.left, precision), CGFloatToFixed(insets.bottom, precision), CGFloatToFixed(insets.right, precision)); return result; }
Swift
func UIEdgeInsetsToFixed(_ insets: UIEdgeInsets, _ precision: UInt) -> UIEdgeInsets
-
Undocumented
Declaration
Objective-C
CG_INLINE UIEdgeInsets UIEdgeInsetsRemoveFloatMin(UIEdgeInsets insets) { UIEdgeInsets result = UIEdgeInsetsMake(removeFloatMin(insets.top), removeFloatMin(insets.left), removeFloatMin(insets.bottom), removeFloatMin(insets.right)); return result; }
Swift
func UIEdgeInsetsRemoveFloatMin(_ insets: UIEdgeInsets) -> UIEdgeInsets
-
判断一个 CGSize 是否存在 NaN
Declaration
Objective-C
static inline BOOL CGSizeIsNaN(CGSize size)
Swift
func CGSizeIsNaN(_ size: CGSize) -> Bool
-
判断一个 CGSize 是否存在 infinite
Declaration
Objective-C
static inline BOOL CGSizeIsInf(CGSize size)
Swift
func CGSizeIsInf(_ size: CGSize) -> Bool
-
判断一个 CGSize 是否为空(宽或高为0)
Declaration
Objective-C
static inline BOOL CGSizeIsEmpty(CGSize size)
Swift
func CGSizeIsEmpty(_ size: CGSize) -> Bool
-
判断一个 CGSize 是否合法(例如不带无穷大的值、不带非法数字)
Declaration
Objective-C
static inline BOOL CGSizeIsValidated(CGSize size)
Swift
func CGSizeIsValidated(_ size: CGSize) -> Bool
-
将一个 CGSize 像素对齐
Declaration
Objective-C
static inline CGSize CGSizeFlatted(CGSize size)
Swift
func CGSizeFlatted(_ size: CGSize) -> CGSize
-
将一个 CGSize 以 pt 为单位向上取整
Declaration
Objective-C
static inline CGSize CGSizeCeil(CGSize size)
Swift
func CGSizeCeil(_ size: CGSize) -> CGSize
-
将一个 CGSize 以 pt 为单位向下取整
Declaration
Objective-C
static inline CGSize CGSizeFloor(CGSize size)
Swift
func CGSizeFloor(_ size: CGSize) -> CGSize
-
Undocumented
Declaration
Objective-C
CG_INLINE CGSize CGSizeToFixed(CGSize size, NSUInteger precision) { CGSize result = CGSizeMake(CGFloatToFixed(size.width, precision), CGFloatToFixed(size.height, precision)); return result; }
Swift
func CGSizeToFixed(_ size: CGSize, _ precision: UInt) -> CGSize
-
Undocumented
Declaration
Objective-C
CG_INLINE CGSize CGSizeRemoveFloatMin(CGSize size) { CGSize result = CGSizeMake(removeFloatMin(size.width), removeFloatMin(size.height)); return result; }
Swift
func CGSizeRemoveFloatMin(_ size: CGSize) -> CGSize
-
判断一个 CGRect 是否存在 NaN
Declaration
Objective-C
static inline BOOL CGRectIsNaN(CGRect rect)
Swift
func CGRectIsNaN(_ rect: CGRect) -> Bool
-
系统提供的 CGRectIsInfinite 接口只能判断 CGRectInfinite 的情况,而该接口可以用于判断 INFINITY 的值
Declaration
Objective-C
static inline BOOL CGRectIsInf(CGRect rect)
Swift
func CGRectIsInf(_ rect: CGRect) -> Bool
-
判断一个 CGRect 是否合法(例如不带无穷大的值、不带非法数字)
Declaration
Objective-C
static inline BOOL CGRectIsValidated(CGRect rect)
Swift
func CGRectIsValidated(_ rect: CGRect) -> Bool
-
检测某个 CGRect 如果存在数值为 NaN 的则将其转换为 0,避免布局中出现 crash
Declaration
Objective-C
static inline CGRect CGRectSafeValue(CGRect rect)
Swift
func CGRectSafeValue(_ rect: CGRect) -> CGRect
-
创建一个像素对齐的CGRect
Declaration
Objective-C
static inline CGRect CGRectFlatMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
Swift
func CGRectFlatMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect
-
对CGRect的x/y、width/height都调用一次flat,以保证像素对齐
Declaration
Objective-C
static inline CGRect CGRectFlatted(CGRect rect)
Swift
func CGRectFlatted(_ rect: CGRect) -> CGRect
-
计算目标点 targetPoint 围绕坐标点 coordinatePoint 通过 transform 之后此点的坐标
Declaration
Objective-C
static inline CGPoint CGPointApplyAffineTransformWithCoordinatePoint( CGPoint coordinatePoint, CGPoint targetPoint, CGAffineTransform t)
Swift
func CGPointApplyAffineTransformWithCoordinatePoint(_ coordinatePoint: CGPoint, _ targetPoint: CGPoint, _ t: CGAffineTransform) -> CGPoint
-
系统的 CGRectApplyAffineTransform 只会按照 anchorPoint 为 (0, 0) 的方式去计算,但通常情况下我们面对的是 UIView/CALayer,它们默认的 anchorPoint 为 (.5, .5),所以增加这个函数,在计算 transform 时可以考虑上 anchorPoint 的影响
Declaration
Objective-C
static inline CGRect CGRectApplyAffineTransformWithAnchorPoint(CGRect rect, CGAffineTransform t, CGPoint anchorPoint)
Swift
func CGRectApplyAffineTransformWithAnchorPoint(_ rect: CGRect, _ t: CGAffineTransform, _ anchorPoint: CGPoint) -> CGRect
-
为一个CGRect叠加scale计算
Declaration
Objective-C
static inline CGRect CGRectApplyScale(CGRect rect, CGFloat scale)
Swift
func CGRectApplyScale(_ rect: CGRect, _ scale: CGFloat) -> CGRect
-
计算view的水平居中,传入父view和子view的frame,返回子view在水平居中时的x值
Declaration
Objective-C
static inline CGFloat CGRectGetMinXHorizontallyCenterInParentRect(CGRect parentRect, CGRect childRect)
Swift
func CGRectGetMinXHorizontallyCenterInParentRect(_ parentRect: CGRect, _ childRect: CGRect) -> CGFloat
-
计算view的垂直居中,传入父view和子view的frame,返回子view在垂直居中时的y值
Declaration
Objective-C
static inline CGFloat CGRectGetMinYVerticallyCenterInParentRect(CGRect parentRect, CGRect childRect)
Swift
func CGRectGetMinYVerticallyCenterInParentRect(_ parentRect: CGRect, _ childRect: CGRect) -> CGFloat
-
返回值:同一个坐标系内,想要layoutingRect和已布局完成的referenceRect保持垂直居中时,layoutingRect的originY
Declaration
Objective-C
static inline CGFloat CGRectGetMinYVerticallyCenter(CGRect referenceRect, CGRect layoutingRect)
Swift
func CGRectGetMinYVerticallyCenter(_ referenceRect: CGRect, _ layoutingRect: CGRect) -> CGFloat
-
返回值:同一个坐标系内,想要layoutingRect和已布局完成的referenceRect保持水平居中时,layoutingRect的originX
Declaration
Objective-C
static inline CGFloat CGRectGetMinXHorizontallyCenter(CGRect referenceRect, CGRect layoutingRect)
Swift
func CGRectGetMinXHorizontallyCenter(_ referenceRect: CGRect, _ layoutingRect: CGRect) -> CGFloat
-
为给定的rect往内部缩小insets的大小(系统那个方法的命名太难联想了,所以定义了一个新函数)
Declaration
Objective-C
static inline CGRect CGRectInsetEdges(CGRect rect, UIEdgeInsets insets)
Swift
func CGRectInsetEdges(_ rect: CGRect, _ insets: UIEdgeInsets) -> CGRect
-
传入size,返回一个x/y为0的CGRect
Declaration
Objective-C
static inline CGRect CGRectMakeWithSize(CGSize size)
Swift
func CGRectMakeWithSize(_ size: CGSize) -> CGRect
-
Undocumented
Declaration
Objective-C
CG_INLINE CGRect CGRectFloatTop(CGRect rect, CGFloat top) { rect.origin.y = top; return rect; }
Swift
func CGRectFloatTop(_ rect: CGRect, _ top: CGFloat) -> CGRect
-
Undocumented
Declaration
Objective-C
CG_INLINE CGRect CGRectFloatBottom(CGRect rect, CGFloat bottom) { rect.origin.y = bottom - CGRectGetHeight(rect); return rect; }
Swift
func CGRectFloatBottom(_ rect: CGRect, _ bottom: CGFloat) -> CGRect
-
Undocumented
Declaration
Objective-C
CG_INLINE CGRect CGRectFloatRight(CGRect rect, CGFloat right) { rect.origin.x = right - CGRectGetWidth(rect); return rect; }
Swift
func CGRectFloatRight(_ rect: CGRect, _ right: CGFloat) -> CGRect
-
Undocumented
Declaration
Objective-C
CG_INLINE CGRect CGRectFloatLeft(CGRect rect, CGFloat left) { rect.origin.x = left; return rect; }
Swift
func CGRectFloatLeft(_ rect: CGRect, _ left: CGFloat) -> CGRect
-
保持rect的左边缘不变,改变其宽度,使右边缘靠在right上
Declaration
Objective-C
static inline CGRect CGRectLimitRight(CGRect rect, CGFloat rightLimit)
Swift
func CGRectLimitRight(_ rect: CGRect, _ rightLimit: CGFloat) -> CGRect
-
保持rect右边缘不变,改变其宽度和origin.x,使其左边缘靠在left上。只适合那种右边缘不动的view 先改变origin.x,让其靠在offset上 再改变size.width,减少同样的宽度,以抵消改变origin.x带来的view移动,从而保证view的右边缘是不动的
Declaration
Objective-C
static inline CGRect CGRectLimitLeft(CGRect rect, CGFloat leftLimit)
Swift
func CGRectLimitLeft(_ rect: CGRect, _ leftLimit: CGFloat) -> CGRect
-
限制rect的宽度,超过最大宽度则截断,否则保持rect的宽度不变
Declaration
Objective-C
static inline CGRect CGRectLimitMaxWidth(CGRect rect, CGFloat maxWidth)
Swift
func CGRectLimitMaxWidth(_ rect: CGRect, _ maxWidth: CGFloat) -> CGRect
-
Undocumented
Declaration
Objective-C
CG_INLINE CGRect CGRectSetX(CGRect rect, CGFloat x) { rect.origin.x = flat(x); return rect; }
Swift
func CGRectSetX(_ rect: CGRect, _ x: CGFloat) -> CGRect
-
Undocumented
Declaration
Objective-C
CG_INLINE CGRect CGRectSetY(CGRect rect, CGFloat y) { rect.origin.y = flat(y); return rect; }
Swift
func CGRectSetY(_ rect: CGRect, _ y: CGFloat) -> CGRect
-
Undocumented
Declaration
Objective-C
CG_INLINE CGRect CGRectSetWidth(CGRect rect, CGFloat width) { if (width < 0) { return rect; } rect.size.width = flat(width); return rect; }
Swift
func CGRectSetWidth(_ rect: CGRect, _ width: CGFloat) -> CGRect
-
Undocumented
Declaration
Objective-C
CG_INLINE CGRect CGRectSetHeight(CGRect rect, CGFloat height) { if (height < 0) { return rect; } rect.size.height = flat(height); return rect; }
Swift
func CGRectSetHeight(_ rect: CGRect, _ height: CGFloat) -> CGRect
-
Undocumented
Declaration
Objective-C
CG_INLINE CGRect CGRectSetSize(CGRect rect, CGSize size) { rect.size = CGSizeFlatted(size); return rect; }
Swift
func CGRectSetSize(_ rect: CGRect, _ size: CGSize) -> CGRect
-
Undocumented
Declaration
Objective-C
CG_INLINE CGRect CGRectToFixed(CGRect rect, NSUInteger precision) { CGRect result = CGRectMake(CGFloatToFixed(CGRectGetMinX(rect), precision), CGFloatToFixed(CGRectGetMinY(rect), precision), CGFloatToFixed(CGRectGetWidth(rect), precision), CGFloatToFixed(CGRectGetHeight(rect), precision)); return result; }
Swift
func CGRectToFixed(_ rect: CGRect, _ precision: UInt) -> CGRect
-
Undocumented
Declaration
Objective-C
CG_INLINE CGRect CGRectRemoveFloatMin(CGRect rect) { CGRect result = CGRectMake(removeFloatMin(CGRectGetMinX(rect)), removeFloatMin(CGRectGetMinY(rect)), removeFloatMin(CGRectGetWidth(rect)), removeFloatMin(CGRectGetHeight(rect))); return result; }
Swift
func CGRectRemoveFloatMin(_ rect: CGRect) -> CGRect
-
outerRange 是否包含了 innerRange
Declaration
Objective-C
static inline BOOL NSContainingRanges(NSRange outerRange, NSRange innerRange)
Swift
func NSContainingRanges(_ outerRange: NSRange, _ innerRange: NSRange) -> Bool
-
Undocumented
Declaration
Objective-C
CG_INLINE BOOL HasOverrideSuperclassMethod(Class targetClass, SEL targetSelector) { Method method = class_getInstanceMethod(targetClass, targetSelector); if (!method) return NO; Method methodOfSuperclass = class_getInstanceMethod(class_getSuperclass(targetClass), targetSelector); if (!methodOfSuperclass) return YES; return method != methodOfSuperclass; }
Swift
func HasOverrideSuperclassMethod(_ targetClass: AnyClass!, _ targetSelector: Selector!) -> Bool
-
如果 fromClass 里存在 originSelector,则这个函数会将 fromClass 里的 originSelector 与 toClass 里的 newSelector 交换实现。 如果 fromClass 里不存在 originSelecotr,则这个函数会为 fromClass 增加方法 originSelector,并且该方法会使用 toClass 的 newSelector 方法的实现,而 toClass 的 newSelector 方法的实现则会被替换为空内容
Warning
注意如果 fromClass 里的 originSelector 是继承自父类并且 fromClass 也没有重写这个方法,这会导致实际上被替换的是父类,然后父类及父类的所有子类(也即 fromClass 的兄弟类)也受影响,因此使用时请谨记这一点。因此建议使用 OverrideImplementation 系列的方法去替换,尽量避免使用 ExchangeImplementations。Declaration
Objective-C
static inline BOOL ExchangeImplementationsInTwoClasses(Class _fromClass, SEL _originSelector, Class _toClass, SEL _newSelector)
Swift
func ExchangeImplementationsInTwoClasses(_ _fromClass: AnyClass!, _ _originSelector: Selector!, _ _toClass: AnyClass!, _ _newSelector: Selector!) -> Bool
Parameters
_fromClass
要被替换的 class,不能为空
_originSelector
要被替换的 class 的 selector,可为空,为空则相当于为 fromClass 新增这个方法
_toClass
要拿这个 class 的方法来替换
_newSelector
要拿 toClass 里的这个方法来替换 originSelector
Return Value
是否成功替换(或增加)
-
交换同一个 class 里的 originSelector 和 newSelector 的实现,如果原本不存在 originSelector,则相当于给 class 新增一个叫做 originSelector 的方法
Declaration
Objective-C
static inline BOOL ExchangeImplementations(Class _class, SEL _originSelector, SEL _newSelector)
Swift
func ExchangeImplementations(_ _class: AnyClass!, _ _originSelector: Selector!, _ _newSelector: Selector!) -> Bool
-
用 block 重写某个 class 的指定方法
Declaration
Objective-C
static inline BOOL OverrideImplementation(Class targetClass, SEL targetSelector, id (^implementationBlock)(Class, SEL, IMP (^)(void)))
Swift
func OverrideImplementation(_ targetClass: AnyClass!, _ targetSelector: Selector!, _ implementationBlock: ((AnyClass?, Selector?, (() -> IMP?)?) -> Any?)!) -> Bool
Parameters
targetClass
要重写的 class
targetSelector
要重写的 class 里的实例方法,注意如果该方法不存在于 targetClass 里,则什么都不做
implementationBlock
该 block 必须返回一个 block,返回的 block 将被当成 targetSelector 的新实现,所以要在内部自己处理对 super 的调用,以及对当前调用方法的 self 的 class 的保护判断(因为如果 targetClass 的 targetSelector 是继承自父类的,targetClass 内部并没有重写这个方法,则我们这个函数最终重写的其实是父类的 targetSelector,所以会产生预期之外的 class 的影响,例如 targetClass 传进来 UIButton.class,则最终可能会影响到 UIView.class),implementationBlock 的参数里第一个为你要修改的 class,也即等同于 targetClass,第二个参数为你要修改的 selector,也即等同于 targetSelector,第三个参数是一个 block,用于获取 targetSelector 原本的实现,由于 IMP 可以直接当成 C 函数调用,所以可利用它来实现“调用 super”的效果,但由于 targetSelector 的参数个数、参数类型、返回值类型,都会影响 IMP 的调用写法,所以这个调用只能由业务自己写。
-
用 block 重写某个 class 的某个无参数且返回值为 void 的方法,会自动在调用 block 之前先调用该方法原本的实现。
Declaration
Objective-C
static inline BOOL ExtendImplementationOfVoidMethodWithoutArguments( Class targetClass, SEL targetSelector, void (^implementationBlock)(__kindof NSObject *))
Swift
func ExtendImplementationOfVoidMethodWithoutArguments(_ targetClass: AnyClass!, _ targetSelector: Selector!, _ implementationBlock: ((NSObject?) -> Void)!) -> Bool
Parameters
targetClass
要重写的 class
targetSelector
要重写的 class 里的实例方法,注意如果该方法不存在于 targetClass 里,则什么都不做,注意该方法必须无参数,返回值为 void
implementationBlock
targetSelector 的自定义实现,直接将你的实现写进去即可,不需要管 super 的调用。参数 selfObject 代表当前正在调用这个方法的对象,也即 self 指针。
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Char, char)
Swift
func isCharTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Char, char)
Swift
func isCharIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Int, int)
Swift
func isIntIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Int, int)
Swift
func isIntTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Short, short)
Swift
func isShortIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Short, short)
Swift
func isShortTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Long, long)
Swift
func isLongTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Long, long)
Swift
func isLongIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(LongLong, long long)
Swift
func isLongLongIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(LongLong, long long)
Swift
func isLongLongTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(NSInteger, NSInteger)
Swift
func isNSIntegerTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(NSInteger, NSInteger)
Swift
func isNSIntegerIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(UnsignedChar, unsigned char)
Swift
func isUnsignedCharTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(UnsignedChar, unsigned char)
Swift
func isUnsignedCharIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(UnsignedInt, unsigned int)
Swift
func isUnsignedIntTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(UnsignedInt, unsigned int)
Swift
func isUnsignedIntIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(UnsignedShort, unsigned short)
Swift
func isUnsignedShortIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(UnsignedShort, unsigned short)
Swift
func isUnsignedShortTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(UnsignedLong, unsigned long)
Swift
func isUnsignedLongTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(UnsignedLong, unsigned long)
Swift
func isUnsignedLongIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(UnsignedLongLong, unsigned long long)
Swift
func isUnsignedLongLongIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(UnsignedLongLong, unsigned long long)
Swift
func isUnsignedLongLongTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(NSUInteger, NSUInteger)
Swift
func isNSUIntegerTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(NSUInteger, NSUInteger)
Swift
func isNSUIntegerIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Float, float)
Swift
func isFloatTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Float, float)
Swift
func isFloatIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Double, double)
Swift
func isDoubleIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Double, double)
Swift
func isDoubleTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(CGFloat, CGFloat)
Swift
func isCGFloatTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(CGFloat, CGFloat)
Swift
func isCGFloatIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(BOOL, BOOL)
Swift
func isBOOLIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(BOOL, BOOL)
Swift
func isBOOLTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Void, void)
Swift
func isVoidIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Void, void)
Swift
func isVoidTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Character, char *)
Swift
func isCharacterTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Character, char *)
Swift
func isCharacterIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Object, id)
Swift
func isObjectTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Object, id)
Swift
func isObjectIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Class, Class)
Swift
func isClassTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Class, Class)
Swift
func isClassIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Selector, SEL)
Swift
func isSelectorIvar(_ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUITypeEncodingDetectorGenerator(Selector, SEL)
Swift
func isSelectorTypeEncoding(_ typeEncoding: UnsafePointer<Int8>!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUIGetIvarValueGenerator(Char, char)
Swift
func getCharIvarValue(_ object: Any!, _ ivar: Ivar!) -> Int8
-
Undocumented
Declaration
Objective-C
_QMUIGetIvarValueGenerator(Int, int)
Swift
func getIntIvarValue(_ object: Any!, _ ivar: Ivar!) -> Int32
-
Undocumented
Declaration
Objective-C
_QMUIGetIvarValueGenerator(Short, short)
Swift
func getShortIvarValue(_ object: Any!, _ ivar: Ivar!) -> Int16
-
Undocumented
Declaration
Objective-C
_QMUIGetIvarValueGenerator(Long, long)
Swift
func getLongIvarValue(_ object: Any!, _ ivar: Ivar!) -> Int
-
Undocumented
Declaration
Objective-C
_QMUIGetIvarValueGenerator(LongLong, long long)
Swift
func getLongLongIvarValue(_ object: Any!, _ ivar: Ivar!) -> Int64
-
Undocumented
Declaration
Objective-C
_QMUIGetIvarValueGenerator(UnsignedChar, unsigned char)
Swift
func getUnsignedCharIvarValue(_ object: Any!, _ ivar: Ivar!) -> UInt8
-
Undocumented
Declaration
Objective-C
_QMUIGetIvarValueGenerator(UnsignedInt, unsigned int)
Swift
func getUnsignedIntIvarValue(_ object: Any!, _ ivar: Ivar!) -> UInt32
-
Undocumented
Declaration
Objective-C
_QMUIGetIvarValueGenerator(UnsignedShort, unsigned short)
Swift
func getUnsignedShortIvarValue(_ object: Any!, _ ivar: Ivar!) -> UInt16
-
Undocumented
Declaration
Objective-C
_QMUIGetIvarValueGenerator(UnsignedLong, unsigned long)
Swift
func getUnsignedLongIvarValue(_ object: Any!, _ ivar: Ivar!) -> UInt
-
Undocumented
Declaration
Objective-C
_QMUIGetIvarValueGenerator(UnsignedLongLong, unsigned long long)
Swift
func getUnsignedLongLongIvarValue(_ object: Any!, _ ivar: Ivar!) -> UInt64
-
Undocumented
Declaration
Objective-C
_QMUIGetIvarValueGenerator(Float, float)
Swift
func getFloatIvarValue(_ object: Any!, _ ivar: Ivar!) -> Float
-
Undocumented
Declaration
Objective-C
_QMUIGetIvarValueGenerator(Double, double)
Swift
func getDoubleIvarValue(_ object: Any!, _ ivar: Ivar!) -> Double
-
Undocumented
Declaration
Objective-C
_QMUIGetIvarValueGenerator(BOOL, BOOL)
Swift
func getBOOLIvarValue(_ object: Any!, _ ivar: Ivar!) -> Bool
-
Undocumented
Declaration
Objective-C
_QMUIGetIvarValueGenerator(Character, char *)
Swift
func getCharacterIvarValue(_ object: Any!, _ ivar: Ivar!) -> UnsafeMutablePointer<Int8>!
-
Undocumented
Declaration
Objective-C
_QMUIGetIvarValueGenerator(Selector, SEL)
Swift
func getSelectorIvarValue(_ object: Any!, _ ivar: Ivar!) -> Selector!
-
Undocumented
Declaration
Objective-C
CG_INLINE id getObjectIvarValue(id object, Ivar ivar) { return object_getIvar(object, ivar); }
Swift
func getObjectIvarValue(_ object: Any!, _ ivar: Ivar!) -> Any!
-
获取业务项目的所有 class
例如:
classref_t *classes = nil; int count = qmui_getProjectClassList(&classes); Class class = (__bridge Class)classes[0];
Declaration
Objective-C
extern int qmui_getProjectClassList(classref_t **classes)
Swift
func qmui_getProjectClassList(_ classes: UnsafeMutablePointer<UnsafeMutablePointer<classref_t?>?>!) -> Int32
Parameters
classes
传入 classref_t 变量的指针,会填充结果到里面,然后可以用下标访问。如果只是为了得到总数,可传入 NULL。
Return Value
class 的总数