小编Roi*_*lia的帖子

Swift - 性能明智 - 比较两个数组并获得每个数组的差异和两个数组的共同点

希望您度过愉快的一天。

我试图了解执行以下操作的最快方法是什么:

假设我有这两个Arrays

var firstArray = ["a","b","c"]
var secondArray = ["a","d","e"]
Run Code Online (Sandbox Code Playgroud)

我想得到以下输出:

1)位于 内部但不位于 中Array的对象。 1)位于 内部但不位于 中的对象。 3)和之间的共同对象。 firstArray secondArray
Array secondArray firstArray
ArrayfirstArraysecondArray

所以基本上输出是:

1) ["b","c"]
2) ["d","e"]
3)["a"]

这里的主要问题是了解什么是最有效的方法。非常感谢!

arrays sorting performance ios swift

2
推荐指数
1
解决办法
2879
查看次数

强制自动布局以在viewDidLoad上正确更新UIView框架

虽然它很简单,但我仍然发现自己正在努力解决正确的问题.

我试图了解在使用自动布局时,在内部找到REAL(或任何其他子视图)帧的正确方法是什么. UIViewviewDidLoad

主要问题是在viewDidLoad中,视图未应用其约束.我知道这种情况的"已知"答案是

override func viewDidLoad() {
        super.viewDidLoad()
     view.layoutIfNeeded()
     stepContainer.layoutIfNeeded() // We need this Subview real frame!
     let realFrame = stepContainer.frame
}
Run Code Online (Sandbox Code Playgroud)

但我发现它并不总是有效,并且不时会给出错误的帧(即不是显示的最终帧).

经过一番研究后,我发现歪曲这段代码可以DispatchQueue.main.async { }得到准确的结果.但是我不确定这是否是正确的处理方法,或者我是否使用此方法导致了一些引擎盖下的问题.最终"工作"代码:

override func viewDidLoad() {
        super.viewDidLoad() 

        DispatchQueue.main.async {
            self. stepContainer.layoutIfNeeded()
            print(self. stepContainer.frame) // Real frame..
        }

}
Run Code Online (Sandbox Code Playgroud)

注意:我只需要从viewDidLoad中找到真正的帧,请不要建议使用viewDidAppear/layoutSubviews等.

uiview viewdidload ios autolayout swift

2
推荐指数
1
解决办法
2157
查看次数

具有可变属性的 Swift 协议

我正在尝试Swift ProtocolVariadic财产创造。根据文档,可以在函数中执行此操作:

func arithmeticMean(_ numbers: Double...) -> Double {
    var total: Double = 0
    for number in numbers {
        total += number
    }
    return total / Double(numbers.count)
}
arithmeticMean(1, 2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)

但是尝试Variadic在协议中创建参数,如下所示:

struct ProductModel {
    
}

protocol SubscriptionModel {
    var products: ProductModel... { get set }
}
Run Code Online (Sandbox Code Playgroud)

导致此错误: 在此处输入图片说明

是不是不可能Variadic在 a 中创建一个属性Protocol

protocols variadic swift swift5

2
推荐指数
1
解决办法
100
查看次数

使用照片框架仅获取实时照片无效

我正在尝试仅从设备相册中获取“实时照片”。我找到了这个Objective C代码,但是由于某种原因,将其转换为Swift时无法编译。

PHFetchOptions *options = [[PHFetchOptions alloc] init];
options.predicate = [NSPredicate predicateWithFormat: @"(mediaSubtype == %ld)", PHAssetMediaSubtypePhotoLive];
options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey: @"creationDate" ascending: NO]];
PHFetchResult<PHAsset *> *assetsFetchResults = [PHAsset fetchAssetsWithMediaType: PHAssetMediaTypeImage options: options];
Run Code Online (Sandbox Code Playgroud)

迅速:

 fetchOptions.predicate = NSPredicate(format: "mediaSubtype == %ld", PHAssetMediaSubtype.PhotoLive)
Run Code Online (Sandbox Code Playgroud)

抛出编译错误:

 Argument type 'PHAssetMediaSubtype' does not conform to expected type 'CVarArgType'

Any suggestions?
Run Code Online (Sandbox Code Playgroud)

nspredicate ios swift photosframework phasset

1
推荐指数
1
解决办法
1055
查看次数

OpenCV - 从 BGRA 输出创建 CV_8UC3(3 通道)Mat

我有一个AVCaptureSession输出CMSampleBuffer像素的东西BGRA。我试图仅使用数据指针以最有效的方式创建Mat对象。BGR

 CVPixelBufferLockBaseAddress(imageBuffer,0);
 void *baseaddress = CVPixelBufferGetBaseAddress(imageBuffer);
 CGRect videoRect = CGRectMake(0.0f, 0.0f, CVPixelBufferGetWidth(imageBuffer), CVPixelBufferGetHeight(imageBuffer));
 size_t bytesPerRow = (((CVPixelBufferGetBytesPerRow(imageBuffer)
 cv::Mat frame(videoRect.size.height, videoRect.size.width,CV_8UC3  , baseaddress,    bytesPerRow);
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用。有什么建议么?

c++ format opencv pixel

1
推荐指数
1
解决办法
5768
查看次数

ConvertRect无法按预期工作

我正在尝试将深层'Subview'框架转换为上层'UIView'.我在这里附加了视图层次结构.

附图:

在此输入图像描述

我试过这个,但结果离开了屏幕:

let rect = smallSubview.convert(smallSubview.frame, to: bigSuperview)
Run Code Online (Sandbox Code Playgroud)

我正在尝试将小的"Subview"框架转换为"VideoCrop"/ bigSuperView坐标空间.有什么建议?谢谢!

converter uiview ios swift

1
推荐指数
1
解决办法
694
查看次数

Swift 4 可解码多个容器

我试图了解如何将这个多容器 JSON 解析为一个对象。我已经尝试过这种方法(Mark answer),但他解释了如何使用一级容器解决它。出于某种原因,我无法模仿多个容器的行为。

 {
     "graphql": {
        "shortcode_media": {
          "id": "1657677004214306744",
          "shortcode": "BcBQHPchwe4"
        }
     }
  }
Run Code Online (Sandbox Code Playgroud)
class Post: Decodable {


    enum CodingKeys: String, CodingKey {
        case graphql // The top level "user" key
        case shortcode_media
    }

    enum PostKeys: String, CodingKey {
        case id
    }

    required init(from decoder: Decoder) throws {

        let values = try decoder.container(keyedBy: CodingKeys.self)

        let post = try values.nestedContainer(keyedBy: PostKeys.self, forKey: .shortcode_media)

        self.id = try post.decode(String.self, forKey: .id)

    }

    var id: String

}
Run Code Online (Sandbox Code Playgroud)

我越来越:

Swift.DecodingError.Context(codingPath: [], …
Run Code Online (Sandbox Code Playgroud)

containers json swift4 codable decodable

1
推荐指数
1
解决办法
2175
查看次数

具有流畅/弹性笔画的圆圈

我和我的团队正在为客户开发一款应用程序。我们正在尝试了解如何实现这种动画(仅指圆形笔画):

在此输入图像描述

我们尝试使用 aCADisplayLink来设置和更改圆,但它生成了不流畅的结果。我们无法找到一种方法来从“组件”创建一个圆UIBezierPath并更改每个锚点。

任何有关如何实现这种效果或如何从单独的点构建圆的建议都将受到高度重视

谨致问候,
Roi 和团队

ios cadisplaylink uibezierpath

1
推荐指数
1
解决办法
473
查看次数

XCODE/SWIFT - 将ADMOB横幅重新定位到底部

我无法在屏幕底部重新定位我的admob横幅,无论我尝试过它都保持在顶部 ..我发现了很多这样的问题,我已经尝试了他们做了什么,没有任何效果.以下是我的尝试:

 bannerView = GADBannerView(adSize: kGADAdSizeBanner)
            bannerView?.adUnitID = "ca-app-pub-466066799532826501/8972705271"
            bannerView?.delegate = self
            bannerView?.rootViewController = self



            let screenRect = UIScreen.mainScreen().bounds

            let screenWidth = screenRect.size.width
            let screenHeight = screenRect.size.height
            let screenXPos = (screenWidth / 2)
            let screenYPos = screenHeight - kGADAdSizeBanner.size.height
            bannerView!.frame = CGRectMake(screenWidth/2.0 - bannerView!.frame.size.width/2.0, screenHeight - bannerView!.frame.size.height,
                bannerView!.frame.size.width,bannerView!.frame.size.height);



            self.view.addSubview(bannerView!)
            bannerView?.loadRequest(GADRequest())

            timerAd?.invalidate()
            timerAd = NSTimer.scheduledTimerWithTimeInterval(40, target: self, selector: "GoogleAdRequestTimer", userInfo: nil, repeats: true)
Run Code Online (Sandbox Code Playgroud)

xcode position admob ios swift

0
推荐指数
1
解决办法
2533
查看次数