使用 Swift 4,我在同一个文件中定义了两个结构,其中一个是私有的,所以这个文件是唯一可以访问它的。此外,我依赖于结构的默认初始值设定项,即我没有明确定义一个:
private struct A {
private let string: String
func foo() {}
}
struct B {
func bar() {
A(string: "baz").foo()
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这将无法编译并出现以下错误:
由于“私有”保护级别,“A”初始值设定项无法访问
我不想A访问其他文件,所以我试图通过制作它来解决它fileprivate(这应该相当于private在这种情况下),但是会发生相同的编译错误(并且它仍然抱怨保护级别是private)。
如何在保留此结构的同时避免显式初始化fileprivate?
这是一个相当常见的问题,但我有一些额外的观点需要注意.其中之一就是我不想让我的酒吧不透明.我喜欢iOS7半透明条.
我有一个UIImageView内部UIScrollView,我试图设置初始scrollView.zoomScale以适应屏幕中的图像,就像股票照片应用程序一样.这意味着:图像不应被裁剪,应尽可能地填满屏幕.
然而,对于我的应用程序,这有点复杂,因为我有可见statusBar,navigationBar和tabBar.我将采用解决方案来隐藏它们,直到用户触摸屏幕,但我仍然很想知道隐藏的解决方案是不可取的.
我目前正在根据图像高度和视图高度之间的关系计算缩放:
double heightRelation = self.image.size.height / self.view.frame.size.height;
Run Code Online (Sandbox Code Playgroud)
将1/heightRelation应用于后scrollView.zoomScale,图像仍然大于有用空间.然后我从文档中找到了iOS7默认高度(20pt)statusBar,tabBar(49pt)和navigationBar(44pt)以及来自:
NSLog(@"status : %f", CGRectGetHeight([[UIApplication sharedApplication] statusBarFrame]));
NSLog(@"tab : %f", self.tabBarController.tabBar.frame.size.height);
NSLog(@"nav : %f", self.navigationController.navigationBar.frame.size.height);
Run Code Online (Sandbox Code Playgroud)
......玩了一会后,我发现确切的组合是从视图的高度减去statusBar和navBar高度:
double heightRelation = self.image.size.height / (self.view.frame.size.height - CGRectGetHeight([[UIApplication sharedApplication] statusBarFrame]) - self.navigationController.navigationBar.frame.size.height);
Run Code Online (Sandbox Code Playgroud)
这适用于纵向模式,但不适用于横向模式.我知道我也可以根据方向设置缩放但是......代码可能会变得不必要的丑陋.
所以我问你:获得有用高度的最佳方法是什么?
PS:Interface Builder的选项"调整滚动视图插入"无效.
基本上我想知道controlEvents.primaryActionTriggered和.touchUpInsidecontrolEvents之间有什么区别,UIButton因为它们似乎被类似地触发。