如果我在Swift中有一个数组,并尝试访问超出范围的索引,则会出现一个不足为奇的运行时错误:
var str = ["Apple", "Banana", "Coconut"]
str[0] // "Apple"
str[3] // EXC_BAD_INSTRUCTION
Run Code Online (Sandbox Code Playgroud)
但是,我会想到Swift带来的所有可选链接和安全性,这样做会很简单:
let theIndex = 3
if let nonexistent = str[theIndex] { // Bounds check + Lookup
print(nonexistent)
...do other things with nonexistent...
}
Run Code Online (Sandbox Code Playgroud)
代替:
let theIndex = 3
if (theIndex < str.count) { // Bounds check
let nonexistent = str[theIndex] // Lookup
print(nonexistent)
...do other things with nonexistent...
}
Run Code Online (Sandbox Code Playgroud)
但事实并非如此 - 我必须使用ol' if语句来检查并确保索引小于str.count.
我尝试添加自己的subscript()实现,但我不知道如何将调用传递给原始实现,或者不使用下标符号来访问项目(基于索引):
extension Array {
subscript(var index: Int) …Run Code Online (Sandbox Code Playgroud) 我的模块中有一个类型:
import Cocoa
class ColoredDotView : NSView {
...
}
Run Code Online (Sandbox Code Playgroud)
它用于许多不同的类,没有问题:
class EditSubjectPopoverController : NSObject {
@IBOutlet internal var subjectColorDotView : ColoredDotView!
...
}
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,当我在一个特定的类中使用它时,我在类型上有编译错误:
class EditTaskPopoverController : NSObject {
@IBOutlet internal var lowPriorityDotView : ColoredDotView! // Error here
@IBOutlet internal var medPriorityDotView : ColoredDotView! // And here...
@IBOutlet internal var highPriorityDotView : ColoredDotView! // And here...
...
}
Run Code Online (Sandbox Code Playgroud)
编译错误是:
EditTaskPopoverController.swift:15:49:使用未声明类型'ColoredDotView'
哪个我不明白.这是文件中的第一个编译错误,其余的错误都是第一个的症状.此外,没有其他文件存在编译错误.我不明白为什么类型是未声明的,因为该文件在同一模块中:

我已经尝试清理项目,清理构建文件夹,然后重新启动Xcode,但无济于事.什么潜在的错误可能导致undeclared typeSwift中的编译器错误?
我有一个OS X应用程序,它通过Mac App Store分发,最近更新到Xcode 4.6.3.
当我现在运行常规构建时,我会收到:
Command /usr/bin/codesign failed with exit code 1:
/Users/Craig/Library/Developer/Xcode/DerivedData/Mac-dxcgahgplwpbjedqnembegifbowj/Build/Products/Debug/MyApp.app: code object is not signed at all
In subcomponent: /Users/Craig/Library/Developer/Xcode/DerivedData/Mac-dxcgahgplwpbjedqnembegifbowj/Build/Products/Debug/MyApp.app/Contents/Frameworks/DropboxOSX.framework
Command /usr/bin/codesign failed with exit code 1
Run Code Online (Sandbox Code Playgroud)
我似乎无法辨别我的项目中的任何其他更改,因此我无法判断它是否与4.6.3更新或其他相关的问题.
我尝试重新启动Xcode,运行干净的构建,并清理构建文件夹.
我正在编写一个上下文"工厂",它将维护一个继承自某些Converter类的转换器/动作对象的字典.这个类有一个方法:
- (Class)classResponsibility
Run Code Online (Sandbox Code Playgroud)
或类似的东西,这样StringConverter类将实现该方法:
- (Class)classResponsibility {
return [NSString class];
}
Run Code Online (Sandbox Code Playgroud)
然后将该转换器存储在字典中,我曾希望做类似的事情:
[converters setValue:stringConverter forKey:[stringConverter classResponsibility]];
Run Code Online (Sandbox Code Playgroud)
但是编译器抱怨类型"Class"是setValue:forKey:方法的参数2的无效参数类型.我本来想避免将密钥设置为类的名称("NSString"),但如果这是最好的解决方案而不是我会使用它.
我.h正在处理的项目中的头文件中有一个小冲突.该项目在Git中进行跟踪.
幸运的是,冲突很容易解决.我用了
git mergetool
并选择了opendiff我的Mac上似乎是FileMerge 的默认值().我做了相应的更改,保存了文件,然后关闭了.
然后Git问我合并是否成功,我说是的:
Was the merge successful? [y/n] y
但现在,我有:
> git st
# On branch develop
# Changes to be committed:
# modified: MyHeader.h
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# MyHeader.h.BACKUP.52920.h
# MyHeader.h.BASE.52920.h
# MyHeader.h.LOCAL.52920.h
# MyHeader.h.REMOTE.52920.h
# MyHeader.h.orig
Run Code Online (Sandbox Code Playgroud)
哪些额外的垃圾冲突文件是由FileMerge创建的,哪些是由Git创建的?
更重要的是:我如何删除它们?
git version-control merge filemerge merge-conflict-resolution
我发现很难将确切的问题写成文字,所以我只想举个例子.
我有两种Enum类型:
enum Shape {
CAT, DOG;
}
enum Color {
BLUE, RED;
}
Run Code Online (Sandbox Code Playgroud)
我有一个方法:
public Object getInstance(String value, Class<?> type);
Run Code Online (Sandbox Code Playgroud)
我想用这样的方法:
// someValue is probably "RED", and someEnumClass is probably Color.class
Color c = getInstance(someValue, someEnumClass);
Run Code Online (Sandbox Code Playgroud)
我一直无法确定如何实施getInstance().一旦知道了Enum要实例化的确切类,就很容易:
Color.valueOf("RED");
Run Code Online (Sandbox Code Playgroud)
但是如何通过一个未知的方式完成上述这一行Class呢?(但是,已知它someEnumClass是.的子类Enum.)
谢谢!
我有一个小类层次结构,我无法实现copyWithZone:.我已经阅读了NSCopying文档,但我找不到正确的答案.
选择两个类:Shape和Square.Square定义为:
@interface Square : Shape
Run Code Online (Sandbox Code Playgroud)
这并不奇怪.每个类都有一个属性,Shape有一个"sides"int,而Square有一个"width"int.该copyWithZone:方法被认为如下:
形状
- (id)copyWithZone:(NSZone *)zone {
Shape *s = [[Shape alloc] init];
s.sides = self.sides;
return s;
}
Run Code Online (Sandbox Code Playgroud)
广场
- (id)copyWithZone:(NSZone *)zone {
Square *s = (Square *)[super copyWithZone:zone];
s.width = self.width;
return s;
}
Run Code Online (Sandbox Code Playgroud)
看一下文档,这似乎是做事的"正确"方式.
它不是.
如果您尝试设置/访问copyWithZone:方法返回的Square的width属性,它将失败,并出现类似于下面的错误:
2010-12-17 11:55:35.441 Hierarchy[22617:a0f] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Shape setWidth:]: unrecognized selector sent to instance 0x10010c970'
Run Code Online (Sandbox Code Playgroud)
调用[super …
当使用GitLab CI以及它时gitlab-ci-multi-runner,我无法获得内部启动的Docker容器以将其端口暴露给"主机",这是运行构建的Docker映像.
我的.gitlab-ci.yml档案:
test:
image: docker
stage: test
services:
- docker:dind
script:
- APP_CONTAINER_ID=`docker run -d --privileged -p "9143:9143" appropriate/nc nc -l 9143`
- netstat -a
- docker exec $APP_CONTAINER_ID netstat -a
- nc -v localhost 9143
Run Code Online (Sandbox Code Playgroud)
我的命令:
gitlab-ci-multi-runner exec docker --docker-privileged test
Run Code Online (Sandbox Code Playgroud)
输出:
$ netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 runner--project-1-concurrent-0:54664 docker:2375 TIME_WAIT
tcp 0 0 runner--project-1-concurrent-0:54666 docker:2375 TIME_WAIT
Active UNIX domain …Run Code Online (Sandbox Code Playgroud) git merge使用以下选项执行a 时:
git merge -X theirs master
偶尔会有冲突的文件:
CONFLICT(修改/删除):在master中删除File_A.java并在HEAD中修改.File_A.java的版本HEAD留在树中.
但是,我希望-X theirs在这些情况下识别该选项,并使用theirs更改的版本,该版本用于删除该文件.
是否有原因导致此类冲突无法自动解决,特别是因为我提供了一个特定的合并策略,建议它应该删除该文件?
此外,如何(如果可能)我可以更新我的merge命令以使用theirs此类冲突的版本?
我们正在使用React Native 0.59.10和React-Redux 5.0.7,并且遇到了CPU限制的性能问题,其中我们的Redux操作需要大约0.25秒才能完成。
我们已经使用Instruments中的“时间剖析器”配置进行了剖析,但是我们的JS代码都没有符号化。
在Chrome中进行远程调试似乎只是调试“远程检查器”页面,这完全无济于事。
有没有一种方法可以将源映射建立或附加到JS函数名称/调用,或用符号表示下面看到的内存地址?
xcode ×5
git ×2
objective-c ×2
swift ×2
class ×1
code-signing ×1
dictionary ×1
docker ×1
dropbox ×1
enums ×1
filemerge ×1
gitlab ×1
gitlab-ci ×1
hierarchy ×1
instruments ×1
ios ×1
java ×1
javascript ×1
macos ×1
merge ×1
nscopying ×1
react-native ×1
reflection ×1