小编Stu*_*art的帖子

Swift Dictionary:将值作为数组获取

我有一个包含UIColor由枚举值散列的对象的字典,ColorScheme:

var colorsForColorScheme: [ColorScheme : UIColor] = ...
Run Code Online (Sandbox Code Playgroud)

我希望能够提取此字典包含的所有颜色(值)的数组.我认为我可以使用该values属性,就像在迭代字典值(for value in dictionary.values {...})时使用的那样,但这会返回错误:

let colors: [UIColor] = colorsForColorSchemes.values
                        ~~~~~~~~~~~~~~~~~~~~~^~~~~~~
'LazyBidrectionalCollection<MapCollectionView<Dictionary<ColorScheme, UIColor>, UIColor>>' is not convertible to 'UIColor'
Run Code Online (Sandbox Code Playgroud)

似乎不是返回Array值,该values方法返回更抽象的集合类型.有没有办法获得Array包含字典的值而不在for-in循环中提取它们?

arrays dictionary swift

140
推荐指数
5
解决办法
7万
查看次数

Swift中的计算只读属性与函数

在Swift WWDC会话简介中,description演示了一个只读属性:

class Vehicle {
    var numberOfWheels = 0
    var description: String {
        return "\(numberOfWheels) wheels"
    }
}

let vehicle = Vehicle()
println(vehicle.description)
Run Code Online (Sandbox Code Playgroud)

选择上述方法而不是使用方法有任何影响:

class Vehicle {
    var numberOfWheels = 0
    func description() -> String {
        return "\(numberOfWheels) wheels"
    }
}

let vehicle = Vehicle()
println(vehicle.description())
Run Code Online (Sandbox Code Playgroud)

在我看来,你选择只读计算属性的最明显的原因是:

  • 语义 - 在这个例子中,成为description类的属性是有意义的,而不是它执行的动作.
  • 简洁/清晰 - 在获取值时无需使用空括号.

显然,上面的例子过于简单,但还有其他充分理由选择其中一个吗?例如,是否有某些功能或属性的功能可以指导您决定使用哪些功能?


NB乍一看,这似乎是一个非常常见的OOP问题,但我很想知道任何特定于Swift的功能,这些功能可以指导使用这种语言时的最佳实践.

methods properties semantics swift

95
推荐指数
6
解决办法
2万
查看次数

为所有UIImageViews添加圆角

我想在我的项目中为所有UIImageViews添加一些圆角.我已经有了代码工作,但我必须将它应用于每个图像; 我应该继承UIImageView来添加它吗?如果是这样,有人可以给我一些指示如何做到这一点?

这是代码

- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *mainpath = [[NSBundle mainBundle] bundlePath];
    welcomeImageView.image = [UIImage imageWithContentsOfFile:[mainpath stringByAppendingString:@"/test.png"]];
    welcomeImageView.layer.cornerRadius = 9.0;
    welcomeImageView.layer.masksToBounds = YES;
    welcomeImageView.layer.borderColor = [UIColor blackColor].CGColor;
    welcomeImageView.layer.borderWidth = 3.0;
    CGRect frame = welcomeImageView.frame;
    frame.size.width = 100;
    frame.size.height = 100;
    welcomeImageView.frame = frame;
}
Run Code Online (Sandbox Code Playgroud)

code-reuse subclass ios objective-c-category

78
推荐指数
4
解决办法
6万
查看次数

ARC下的IBOutlet和viewDidUnload

还有一个类似的问题这对SO 在这里,但我只是想澄清的东西,并没有完全解释存在.

据我所知,所有代表和出口 - 事实上任何对"父"对象的引用,作为一个好公民,并考虑一分钟的对象图 - 应该归结为弱引用.由于零指针的性质在引用对象的保留计数达到零时自动降至零,这是否意味着现在将IBOutlets设置为nil viewDidUnload是不必要的?

所以,如果我这样宣布我的出口:

@property (nonatomic, weak) IBOutlet UILabel *myLabel;
Run Code Online (Sandbox Code Playgroud)

以下代码是否有效?

- (void)viewDidUnload
{
    self.myLabel = nil;

    [super viewDidUnload];
}
Run Code Online (Sandbox Code Playgroud)

weak-references iboutlet ios automatic-ref-counting

36
推荐指数
3
解决办法
7076
查看次数

Objective-C回调处理程序

我有一个回调方法,我必须工作,但我想知道如何传递值.

我有的是这个:

@interface DataAccessor : NSObject
{
    void (^_completionHandler)(Account *someParameter);

}


- (void) signInAccount:(void(^)(Account *))handler;
Run Code Online (Sandbox Code Playgroud)

上面的代码有效,但我想将值传递给方法.这看起来怎么样?就像是:

- (void) signInAccount:(void(^)(Account *))handler user:(NSString *) userName pass:(NSString *) passWord;
Run Code Online (Sandbox Code Playgroud)

methods objective-c callback ios objective-c-blocks

34
推荐指数
1
解决办法
5万
查看次数

isEqual并不总是适用于NSIndexPath?我可以用它来代替什么?

我有一些代码依赖于比较两个NSIndexPaths并根据它们的相等或缺乏来执行不同的代码(使用-isEqual).大部分时间它都能正常工作,但有时则不然.我已经使用调试器控制台在代码执行期间测试两个索引路径,它们看起来与我相同.

这是代码:

- (BOOL)selectedStreetIsSameAsLastSelectedStreet
{
    return [self.indexPathOfSelectedStreet isEqual:self.previousObject.indexPathOfSelectedStreet];
}
Run Code Online (Sandbox Code Playgroud)

这是执行代码期间的输出:

(gdb) po self.indexPathOfSelectedStreet
<NSIndexPath 0x60a0770> 2 indexes [26, 1]
(gdb) po self.previousObject.indexPathOfSelectedStreet
<NSIndexPath 0x55b4f70> 2 indexes [26, 1]
(gdb) p (BOOL)[self.indexPathOfSelectedStreet isEqual:self.previousObject.indexPathOfSelectedStreet]
$2 = 0 '\000'
Run Code Online (Sandbox Code Playgroud)

我做错了什么,还是有另一种方法可以可靠地测试两个NSIndexPaths的相等性?

equality objective-c nsindexpath iphone-sdk-3.2

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

将转换应用于UITextView - 防止内容调整大小

当我将旋转变换应用于a UITextView然后单击内部以开始编辑时,似乎内容大小自动变宽.内容视图的新宽度是旋转视图的边界框的宽度.例如,给定宽度为500且高度为400的文本框,并旋转30度,新的内容宽度将为:

(500 * cos(30)) + (400 * sin(30)) = 633
Run Code Online (Sandbox Code Playgroud)

或图形化:

在此输入图像描述

有趣的是,如果您已经在编辑文本视图,然后应用转换,那么似乎不会对内容大小进行任何修改.所以看起来在文本编辑开始的某个时候,文本视图会查看其frame属性并根据帧宽调整内容大小.我想这个解决方案是告诉它使用bounds属性,但我不知道在哪里做,因为我不确定文本视图决定修改内容大小的确切位置.

我用谷歌搜索,但似乎无法找到任何使用转换的UITextViews的参考.有没有人对此有任何想法?

编辑(测试项目的按钮操作):

- (IBAction)rotateButtonTapped:(id)sender {
    if (CGAffineTransformIsIdentity(self.textView.transform)) {
        self.textView.transform = CGAffineTransformMakeRotation(30.0 * M_PI / 180.0);
    }
    else {
        self.textView.transform = CGAffineTransformIdentity;
    }

    NSLog(@"contentsize: %.0f, %.0f", textView.contentSize.width, textView.contentSize.height);
}
Run Code Online (Sandbox Code Playgroud)

transform rotation uitextview cgaffinetransform ios

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

使用GLKit进行按需OpenGL ES渲染

我正在寻找转换我的OpenGL渲染代码以利用一些功能GLKit(即异步纹理加载和由其提供的自动化GLKView/Controller).但是,似乎这些类的设计主要是为了适应使用动画循环渲染的人,而我正在使用按需渲染.另外,一些渲染是针对纹理而不是GLKView的帧缓冲,所以我是否应该只是将GLKView子类化并添加其他FBO?

这种类型的设置是否有推荐的方法?我希望有类似的东西:

  • 将视图控制器设置preferredFramesPerSecond0,或者只是暂停帧更新?
  • 忽略glkViewControllerUpdateglkView:drawInRect:方法,只需要我需要的东西.
  • 将视图setNeedsDisplay与法线UIView一起使用以显示帧(我是否需要调用,bindDrawable因为我也将渲染到纹理?).

如果这不是新API的设计,那么也许不值得努力?我希望文档比它更彻底.当API稍微"成熟"时,可能会提供更多样本......

谢谢

opengl-es ios glkit

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

状态栏为横向,但[[UIApplication sharedApplication] statusBarOrientation]返回纵向

这个问题似乎是间歇性的,但我不确定为什么.在设备(iPad)上运行我的应用程序时,我有一些代码可以根据当前设备方向加载带有一些图像视图的滚动视图.即使设备在加载之前是横向的,视图也会像纵向一样被加载.

通过调用找到方向[[UIApplication sharedApplication] statusBarOrientation].

视图设置为在旋转设备时调整其位置,实际上,旋转到纵向然后返回到横向将它们返回到正确的横向位置.是否所有应用程序都以纵向方式开始,如果需要,很快就会更改为横向?我是否试图过早检查方向(在init第一个视图控制器加载期间)?

orientation ipad uiinterfaceorientation ios

16
推荐指数
2
解决办法
4万
查看次数

自定义文件类型的图标(iOS或OS X)

我正在寻找有关在我的iOS应用中为文档类型创建自定义图标的信息/文档.我相信我已经看到一些Apple开发人员指南有关于此的信息,但我一直在搜索,找不到它!

在应用程序的Info.plist中,我指定了自定义文档类型和相应的导出UTI(​​符合com.apple.package).Xcode可以很容易地在目标设置的"信息"选项卡下为这些图像指定图像,但是我找不到有关它们应该是什么尺寸的信息,或者在什么情况下文档图标可见.我相信iOS会使用应用程序图标自动为您创建一个"默认"文档图标(根据HIG的这一部分),因此,如果我使用户可以通过电子邮件共享文档,则另一个用户安装了该应用程序他们的iOS设备会看到此默认文档图标.

还可以在哪里看到此文档图标?目前在iTunes文件共享中,文档显示为具有自定义文件扩展名的目录 - 如果为文档指定了图标,可能会改变这种情况?在OS X文件系统中查看其中一个文档时,它显示为标准白色文档(即看起来像未知文件类型) - 是否有任何方法可以使用正确的图标显示,或者用户是否需要Mac已安装的app,指定了这样的文件类型?

icons document file-type ios

16
推荐指数
2
解决办法
9868
查看次数