Arrays Swift中CGGetOnlineDisplayList的用法(数组作为参数)

Arrays Swift中CGGetOnlineDisplayList的用法(数组作为参数),arrays,macos,swift,parameters,Arrays,Macos,Swift,Parameters,以下是我目前的Swift代码。不幸的是,CGGetOnlineDisplayList没有更新数组OnlinedSpy。谢谢你的帮助 梅因·斯威夫特 这里有几个问题会误导您相信您的onlineDspys数组没有更新 第一个问题是,实际上您正在使用CGGetOnlineDisplayList方法调用将其设置为的确切值预填充该数组的第一个索引。如果您改为使用类似于0的值预填充它,您将看到它正在填充: var onlineDspys: [CGDirectDisplayID] = [0] 第二个问题是,

以下是我目前的Swift代码。不幸的是,CGGetOnlineDisplayList没有更新数组OnlinedSpy。谢谢你的帮助

梅因·斯威夫特
这里有几个问题会误导您相信您的
onlineDspys
数组没有更新

第一个问题是,实际上您正在使用
CGGetOnlineDisplayList
方法调用将其设置为的确切值预填充该数组的第一个索引。如果您改为使用类似于
0
的值预填充它,您将看到它正在填充:

var onlineDspys: [CGDirectDisplayID] = [0]
第二个问题是,
CGGetOnlineDisplayList
不会为我们分配内存。它不能在我们的数组上调用
append
。我们必须给它一块内存来填充这些值。所以,当我们设置要传递给函数的变量时,我们需要像这样设置它们:

let maxDisplays: UInt32 = 16
var onlineDisplays = [CGDirectDisplayID](count: Int(maxDisplays), repeatedValue: 0)
var displayCount: UInt32 = 0
现在,我们的
onlineDisplays
是一个满16个零的数组,用于
CGGetOnlineDisplayList
填充

我们称该函数为:

let dErr = CGGetOnlineDisplayList(maxDisplays, & onlineDisplays, & displayCount)
现在,棘手的一点。。。我们不想浪费时间迭代数组中没有填充的部分,因此我们利用函数填充到
displayCount
变量中的内容:

for currentDisplay in onlineDisplays[0..<Int(displayCount)] {
    print("currentDisplay is \(currentDisplay)")
    print("CGDisplayPixelsHigh(currentDisplay) is \(CGDisplayPixelsHigh(currentDisplay))")
    print("CGDisplayPixelsWide(currentDisplay) is \(CGDisplayPixelsWide(currentDisplay))")
}

用于在线显示中的currentDisplay[0.
cGetOnlineDisplayList
做什么?看看
dErr
dspyCnt
有什么值?还有,你的键盘出了什么问题导致了所有这些奇怪的VRBLNM?Vwls cst$250:-)在这里它起作用了,但我不得不将onlineDisplays行更改为:
var onlineDisplays=[CGDirectDisplayID](重复:0,count:Int(maxDisplays))
如果您想在超过16个显示器的极端情况下进行动态调整,请在初始化
onlineDisplays之前使用
var-maxDisplays:UInt32=0
CGGetOnlineDisplayList(0,nil,&maxDisplays)
for currentDisplay in onlineDisplays[0..<Int(displayCount)] {
    print("currentDisplay is \(currentDisplay)")
    print("CGDisplayPixelsHigh(currentDisplay) is \(CGDisplayPixelsHigh(currentDisplay))")
    print("CGDisplayPixelsWide(currentDisplay) is \(CGDisplayPixelsWide(currentDisplay))")
}
import Foundation
import CoreGraphics

var mainID = CGMainDisplayID()

print("ID is \(mainID)")

let maxDisplays: UInt32 = 16
var onlineDisplays = [CGDirectDisplayID](count: Int(maxDisplays), repeatedValue: 0)
var displayCount: UInt32 = 0

let dErr = CGGetOnlineDisplayList(maxDisplays, &onlineDisplays, &displayCount)

print("dspyCnt is \(displayCount)")

for currentDisplay in onlineDisplays[0..<Int(displayCount)] {
    print("currentDisplay is \(currentDisplay)")
    print("CGDisplayPixelsHigh(currentDisplay) is \(CGDisplayPixelsHigh(currentDisplay))")
    print("CGDisplayPixelsWide(currentDisplay) is \(CGDisplayPixelsWide(currentDisplay))")
}