简体   繁体   English

如何将此语法 Swift 转换为 Objective-C

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM