Apple的Java,在我的机器上的第6版,有一个类com.apple.eawt.CocoaComponent用于将AWT/Swing应用程序连接到Cocoa组件.示例用法:在Java应用程序中显示AudioUnit的UI(这是一个Cocoa视图).我想使用Java 7,但我找不到这个类.有人知道它在哪里吗?或者,如果有替代方案?
默认情况下,SBT下编译源src/main和src/tests以target/scala-[version]/classes和target/scala-[version]/test-classes分别.我想定义另一个名为core的组,我可以将其放入src/core/java或者src/core/scala将其编译为单独的类路径.我该怎么做呢?
我的动机:我想拥有单独的类文件组,因为我想在开发期间重新编译和重新加载新的应用程序代码,而无需重新启动正在运行的应用程序的JVM进程.因此核心类将在应用程序启动时加载,并且它们将使用自定义类加载器从src/main加载其他所有内容.后面的类将是可重新加载的.我需要这样做,因为我正在编写一个通过JNI加载软件乐器的音乐程序,这需要很长时间才能加载.在开发过程中重新启动应用程序浪费了太多时间.
我主要需要分离类文件.如果我正在制作罐子,我想要myapp-core.jar和myapp-main.jar,但这并不重要,因为这比开发产品更重要.
第一次尝试:
val Core = config("core")
...
classDirectory in Core <<= crossTarget(t => file(t.getAbsolutePath + "core-classes"))
Run Code Online (Sandbox Code Playgroud)
给出了这个错误:
Reference to undefined setting:
{.}/*:cross-target from {.}/core:class-directory
Did you mean *:cross-target ?
Run Code Online (Sandbox Code Playgroud)
我现在就去看看范围...
以下是我的Scala提示中的一些片段.我导入反射API并尝试重新表达一些表达式,如此处的文档中所述.
scala> import scala.reflect.runtime.{universe => ru}
scala> val str = "Duck I says."
scala> ru.showRaw(ru.reify(println(2)))
res40: String = Expr(Apply(Select(Select(This(newTypeName("scala")),
newTermName("Predef")), newTermName("println")), List(Literal(Constant(2)))))
scala> ru.showRaw(ru.reify(str.length))
res41: String = Expr(Apply(Select(Select(Select(Select(Select(Ident($line4),
newTermName("$read")), newTermName("$iw")), newTermName("$iw")),
newTermName("str")), newTermName("length")), List()))
Run Code Online (Sandbox Code Playgroud)
我不希望看到这些符号$line4,$read以及$iw在第二个.他们是什么,他们为什么在那里?
UnsafePointer您可以从整数构造一个,例如:
let ptr = UnsafePointer<Void>(bitPattern: 123)
Run Code Online (Sandbox Code Playgroud)
但是如何从指针返回整数位模式(在本例中为 123)呢?
你为什么要这样做?
(添加是为了回应一些评论,这些评论表明我没有正确使用指针。)
这不是您通常会做的事情,并且上面的指针实际上并不是指向任何东西的指针。如果程序取消引用它,它就会崩溃。
一些低级 C API 用于void *引用某些任意数据。它是泛型类型的 C 版本。例如,想象一下 C 语言中的堆栈数据结构,具有如下 API
Stack *create_stack();
void stack_push(Stack *stack, void *element);
void *stack_pop(Stack *stack);
Run Code Online (Sandbox Code Playgroud)
通常您会将指针传递给堆分配的数据,但假设您只需要一个 64 位整数的堆栈,并且您知道系统上的指针是 64 位。您可以将整数直接存储在堆栈中,并避免堆分配......
Stack *myStack = create_stack();
long elt = 123;
stack_push(myStack, (void*)elt);
...
elt = (long)stack_pop(myStack);
Run Code Online (Sandbox Code Playgroud)
我正在处理这样的 API,但更复杂(对于多边形镶嵌)。
我正在尝试在我的Swift项目中包含一个第三方静态库。我有这两个文件,还有一些。
GoogleConversionTrackingSDK / ACTReporter.h GoogleConversionTrackingSDK / libGoogleConversionTracking.a
我将.a文件添加到目标的“链接框架和库”部分。然后module.map,我在项目中创建了一个文件,如下所示:
module GoogleConversionTracking {
header "../../Libs/GoogleConversionTrackingSDK/ACTReporter.h"
export *
}
Run Code Online (Sandbox Code Playgroud)
在Swift文件中,我现在可以引用它:
import GoogleConversionTracking
Run Code Online (Sandbox Code Playgroud)
但是在链接时出现错误:
ld:-lGoogleConversionTracking找不到库
clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
注意:-lGoogleConversionTracking找不到库
您如何解决这个问题?我不希望使用桥接头,而是尽可能使用这些模块定义文件。
假设我的组件有一个状态,它是一组选定的 ID。Javascript 有一个Set类型,所以我试试这个:
let [selectedIDs, setSelectedIDs] = useState(new Set());
Run Code Online (Sandbox Code Playgroud)
JavascriptSet本身是可变的,所以我很困惑。
function toggleSelectedID(id) {
let set = selectedIDs;
if (set.has(id)) { set.delete(id) }
else { set.add(id) }
// ???
setSelectedIDs(set);
}
Run Code Online (Sandbox Code Playgroud)
如果Set对象不可变,我将Set使用添加或删除的元素创建一个新元素,并将该新元素传递Set给setSelectedIDs,更改此时的状态。
但是对于 mutable Set,如果我们???在线路上返回会发生什么?React 是否会处于糟糕的状态,因为我“进入”了它的状态并在没有正式告诉它的情况下对其进行了变异setSelectedIDs?
我正在观看 WWDC 2019 演讲Building Custom Views with SwiftUI。大约 14:50,他描述了布局的算法,他说“我们将空间分成 3 个相等的部分,并根据最不灵活的孩子的大小提出其中之一”。
父母(the HStack)如何知道哪个孩子是“最不灵活”的?
到目前为止,SwiftUI 中布局算法的解释对我来说已经很清楚了——父视图向子视图提出一个大小,子视图以他们想要的大小进行响应。在这种情况下,听起来像是在向孩子们建议尺寸之前咨询了每个孩子的其他属性。但是这个属性是什么,你如何从代码中控制它?
我从这个开始。一些带有两个滑块的用户界面。
由这段代码定义:
struct ContentView: View {
@State private var num1: Double = 0.5
@State private var num2: Double = 0.5
let blueGreen = Color(red: 0.2, green: 0.6, blue: 0.6)
var body: some View {
VStack {
Circle().fill(blueGreen).border(Color.blue, width: 1.0).padding(4.0)
VStack {
HStack {
Text("Value:")
Slider(value: $num1, in: 0...1)
}
HStack {
Text("Opacity:")
Slider(value: $num2, in: 0...1)
}
}
Spacer()
}.border(Color.green, width: 1.0).padding()
}
}
Run Code Online (Sandbox Code Playgroud)
我希望“值:”和“不透明度:”标签在其后缘上对齐,使滑块对齐且宽度相同。我听说自定义对齐可以像这样对齐视图,即不是同级的视图。
所以我添加了自定义对齐方式:
extension HorizontalAlignment {
private enum MyAlignment : AlignmentID {
static func defaultValue(in d: ViewDimensions) …Run Code Online (Sandbox Code Playgroud) 这是ListSwiftUI 中分层的简单演示。我正在 macOS Big Sur 上对其进行测试,但与其他 UI 工具包中的类似树组件不同,它会立即询问其所有子项。所以我不能将它用于文件系统浏览器之类的东西。
有没有办法让它变得懒惰,以便它只要求children何时展开 UI 元素?
class Thing: Identifiable {
let id: UUID
let depth: Int
let name: String
init(_ name: String, depth: Int = 0) {
self.id = UUID()
self.name = name
self.depth = depth
}
/// Lazy computed property
var children: [Thing]? {
if depth >= 5 { return nil }
if _children == nil {
print("Computing children property, name=\(name), depth=\(depth)")
_children = (1...5).map { n in
Thing("\(name).\(n)", depth:depth+1) …Run Code Online (Sandbox Code Playgroud) swiftui ×3
macos ×2
swift ×2
alignment ×1
cjk ×1
cocoa ×1
java ×1
layout ×1
module ×1
module-map ×1
react-hooks ×1
reactjs ×1
reflection ×1
sbt ×1
scala ×1
swiftui-list ×1
unicode ×1
xcode9 ×1