[英]How to convert this syntax Swift into Objective-C
I'm converting a Swift project into Objective-C.我正在将 Swift 项目转换为 Objective-C。 And when I convert follow code, I don't know it's correct or wrong.
当我转换跟随代码时,我不知道它是对还是错。
Swift迅速
let closest = layoutAttributes.sorted {
abs($0.center.x - proposedContentOffsetCenterOrigin) < abs($1.center.x - proposedContentOffsetCenterOrigin)
}.first ?? UICollectionViewLayoutAttributes()
Objective-C目标-C
UICollectionViewLayoutAttributes *closest = [[layoutAttributes sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
return
fabsf([(UICollectionViewLayoutAttributes*)a center].x - proposedContentOffsetCenterOrigin)
<
fabsf([(UICollectionViewLayoutAttributes*)b center].x - proposedContentOffsetCenterOrigin);
}] firstObject];
You can simplify the code a bit.您可以稍微简化一下代码。 Also the return value has to be different in Obj-C.
Obj-C 中的返回值也必须不同。
UICollectionViewLayoutAttributes *closest = [[layoutAttributes sortedArrayUsingComparator:^NSComparisonResult(UICollectionViewLayoutAttributes *a, UICollectionViewLayoutAttributes *b) {
CGFloat distanceA = ABS(a.center.x - proposedContentOffsetCenterOrigin);
CGFloat distanceB = ABS(b.center.x - proposedContentOffsetCenterOrigin);
if (distanceA < distanceB) {
return NSOrderedAscending;
} else if (distanceA > distanceB) {
return NSOrderedDescending;
}
return NSOrderedSame;
}] firstObject];
The Swift ?? UICollectionViewLayoutAttributes()
斯威夫特
?? UICollectionViewLayoutAttributes()
?? UICollectionViewLayoutAttributes()
would be translated as ?: [[UICollectionViewLayoutAttributes alloc] init];
?? UICollectionViewLayoutAttributes()
将被翻译为?: [[UICollectionViewLayoutAttributes alloc] init];
but you don't need that there if your array is not empty.但是如果您的数组不为空,则不需要那里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.