在Xcode 6.2测试版,我能做出一些视图控制器,如"视图 - 控制器"或"导航视图控制器"通过拖放就可以了"切入点箭头"我接口的切入点,它给了我这样的事情:
但是,当我想拖动标签栏控制器上这个箭头,这是行不通的,所以是一个错误或我应该做它以另一种方式?
我正在尝试创建 SwiftUI 支持的自定义属性包装器,这意味着对相应属性值的更改会导致 SwiftUI 视图的更新。这是我所拥有的简化版本:
@propertyWrapper
public struct Foo: DynamicProperty {
@ObservedObject var observed: SomeObservedObject
public var wrappedValue: [SomeValue] {
return observed.value
}
}
Run Code Online (Sandbox Code Playgroud)
我看到即使 myObservedObject
包含在我的自定义属性包装器中,SwiftUI 仍然会捕获更改,SomeObservedObject
只要:
DynamicProperty
不幸的是,文档很少,我很难判断这是否仅适用于当前的 SwiftUI 实现。
DynamicProperty
(在 Xcode 中,而不是在线)的文档似乎表明这样的属性是从外部更改导致视图重绘的属性,但是无法保证当您使自己的类型符合此协议时会发生什么。
我可以期待这在未来的 SwiftUI 版本中继续工作吗?
在Swift类中,我想使用属性作为同一类方法的默认参数值.
这是我的代码:
class animal {
var niceAnimal:Bool
var numberOfLegs:Int
init(numberOfLegs:Int,animalIsNice:Bool) {
self.numberOfLegs = numberOfLegs
self.niceAnimal = animalIsNice
}
func description(animalIsNice:Bool = niceAnimal,numberOfLegs:Int) {
// I'll write my code here
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我不能将我的niceAnimal属性用作默认函数值,因为它触发了我一个编译时错误:
'animal.Type'没有名为'niceAnimal'的成员
难道我做错了什么 ?或者在Swift中是不可能的?如果那是不可能的,你知道为什么吗?
我试图在Swift中使用碰撞位掩码和接触测试位掩码,我希望两个对象不要碰撞在一起,所以我在做:
firstNode.physicsBody?.collisionBitMask = 0b01
secondNode?.collisionBitMask = 0b10
Run Code Online (Sandbox Code Playgroud)
由于SpriteKit不上这两个数字与操作,应该没有结果是00
因为10 & 01 = 00
?
那么为什么碰撞会发生呢?
谢谢.
我一直在使用arc4random()和arc4random_uniform(),我总觉得它们不是完全随机的,例如,我是从一个数组中随机选择值,但是当我生成它们时,经常出现的值是相同的连续多次,所以今天我认为我会使用Xcode游乐场来看看这些函数是如何表现的,所以我首先测试arc4random_uniform来生成0到4之间的数字,所以我使用了这个算法:
import Cocoa
var number = 0
for i in 1...20 {
number = Int(arc4random_uniform(5))
}
Run Code Online (Sandbox Code Playgroud)
我跑了几次,这里是大多数时候价值观的变化:
因此,您可以看到值重复增加和减少,并且一旦值处于最大值/最小值,它们通常会在特定时间内保持不变(请参阅第5步中的第一个屏幕截图,值在6期间保持为3)步骤,问题是它一点都不寻常,在我的测试中,函数实际上大部分时间都是这样.
现在,如果我们看一下arc4random()
,它基本上是一样的:
所以这是我的问题:
谢谢.
编辑:
最后,我做了两个令人惊讶的实验,第一个带有真正的骰子:
让我感到惊讶的是,我不会说它是随机的,因为我看到了与arc4random()和arc4random_uniform()所描述的非随机相同的模式,所以Jean-BaptisteYunès指出,人类不好看,数字序列是否真的是随机的.
我还想做一个更"科学"的实验,所以我做了这个算法:
import Foundation
var appeared = [0,0,0,0,0,0,0,0,0,0,0]
var numberOfGenerations = 1000
for _ in 1...numberOfGenerations {
let randomNumber = Int(arc4random_uniform(11))
appeared[randomNumber]++
}
for (number,numberOfTimes) in enumerate(appeared) {
println("\(number) appeard \(numberOfTimes) times (\(Double(numberOfGenerations)/Double(numberOfTimes))%)")
}
Run Code Online (Sandbox Code Playgroud)
要查看每个数字出现的次数,并且有效地数字是随机生成的,例如,这里是控制台的一个输出:
0出现99次.
1次出现了97次.
2次出现了78次.
3次出现了80次.
4次出现了87次.
5次出现107次.
6次出现了86次.
7次出现了97次.
8次出现了100次.
9次出现91次. …
我正在尝试将 Visual Studio Code 配置为使用 TypeScript(在 Node 包中),我也在使用ts-jest
/Jest
来创建测试,此外,我还安装了 Jest 扩展。
我已经能够弄清楚如何使断点工作,但现在我注意到我无法正确地介入我的代码,我什至不能 100% 确定断点工作完美。
单击 step 按钮时,将恢复执行,并且不会在下一行再次停止,唯一让它停止的方法是在我想要的位置放置其他断点。代码会在断点设置为 AFAICT 的正确位置停止。
编辑:实际上,步进有时会再次停止,但似乎是来自实现的 js 代码(例如,console.log 步骤到与日志相关的代码,但永远不会再次踩到我的代码)
编辑#2:通过尝试使用更简单的项目重现问题,我意识到不再导入我正在使用的库(Phaser)修复了问题,我希望这可以帮助隔离问题的原因。
编辑 #3:这是一个链接,可以重现我正在谈论的问题:https : //github.com/adtrevor/VSCodeDebugIssue
如果要测试它,只需克隆它,npm install
然后启动“调试玩笑测试”运行/调试面板中的任务。设置断点line 23
的hey.ts
(第一指令barFunction()
),调试器将停在那里,但如果你在执行代码,你应该注意到,在某些时候你离开当前范围(执行后console.log("B")
,再也不会回到它在我的情况)。
编辑 #4:这是一个更完整的示例,显示了https://github.com/adtrevor/TSVSCodeSOQuestion/问题。如果您克隆它,安装依赖项,并在 ChunkManager.ts 的第 156 行设置断点,您会注意到即使我应用了@GiacomoDeLiberali 的更改,步进也无法正常运行。不过,也许这个错误是相关的。
我完全不知道配置有什么问题,也不知道首先要看哪里,因为我没有关于调试的其他错误消息。这是我的配置文件的内容:
启动文件
{
// Use IntelliSense to learn about possible Node.js debug attributes.
// Hover to view descriptions of existing …
Run Code Online (Sandbox Code Playgroud) 当我使用Swift语言创建一个新的Scene Kit游戏时,已经出现了一些结果:
我想要关闭点亮立方体的环境光,但我不知道如何做到这一点,因为没有明确附加到任何节点的任何光.
她的游戏视图控制器代码:
import SceneKit
import QuartzCore
class GameViewController: NSViewController {
@IBOutlet var gameView: GameView
override func awakeFromNib(){
// create a new scene
let scene = SCNScene()
// create and add a camera to the scene
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
scene.rootNode.addChildNode(cameraNode)
// place the camera
cameraNode.position = SCNVector3(x: 0, y: 0, z: 2)
// create and add a 3d box to the scene
let boxNode = SCNNode()
boxNode.geometry = SCNBox(width: 1, height: 1, length: 1, chamferRadius: …
Run Code Online (Sandbox Code Playgroud) 可以说我有一个类型为type的变量Any
,我想知道这是否是数组,这是我想做的:
if myVariable is Array { /* Do what I want */ }
Run Code Online (Sandbox Code Playgroud)
但是Swift需要提供数组的通用类型,例如:
if myVariable is Array<Int> { }
Run Code Online (Sandbox Code Playgroud)
但是我不想检查泛型类型,我只是想知道这是否是数组,我试过了:
if myVariable is Array<Any> { }
Run Code Online (Sandbox Code Playgroud)
希望它可以匹配每种类型的数组,但是也不起作用...(它不匹配所有类型的数组,因此,如果我的变量是一个Int数组,则不会调用此代码)
我该怎么办 ?
谢谢。
使用似乎无效的方法解决方案示例进行编辑:
struct Foo<T> {}
struct Bar {
var property = Foo<String>()
}
var test = Bar()
let mirror = Mirror(reflecting: test)
// This code is trying to count the number of properties of type Foo
var inputCount = 0
for child in mirror.children {
print(String(describing: type(of: child))) …
Run Code Online (Sandbox Code Playgroud) 我想知道如果CMMotionActivity发生变化,系统是否可以在后台唤醒应用程序,例如,如果用户在坐下后开始步行/跑步,我希望能够执行一些代码并安排本地通知.
有没有办法要求系统在后台唤醒我的应用程序?
编辑:通过查看引用,它似乎是不可能的("[...]并且在您的应用程序被暂停时不会提供更新."),但也许还有其他方法?
ObservableObject
Combine 框架定义的协议有一个objectWillChange
发布者属性,它让你知道这个对象的属性何时会发生变化,这意味着,如果这个发布者的订阅者在收到 this will change 事件时读取它的值,他们仍然会读取在更改之前的值,我试图理解的是:
ObservableObject
收到 will change 事件后,如何获取 an 的实际新值?swift ×8
ios ×2
combine ×1
core-motion ×1
darwin ×1
generics ×1
jestjs ×1
random ×1
scenekit ×1
sprite-kit ×1
swiftui ×1
ts-jest ×1
typescript ×1
xcode ×1