小编Wes*_*gne的帖子

为Swift中的Optional提供默认值?

在Swift中处理选项的习惯用法似乎过于冗长,如果你想做的就是在nil的情况下提供一个默认值:

if let value = optionalValue {
    // do something with 'value'
} else {
    // do the same thing with your default value
}
Run Code Online (Sandbox Code Playgroud)

这涉及不必要地复制代码,或

var unwrappedValue
if let value = optionalValue {
    unwrappedValue = value
} else {
    unwrappedValue = defaultValue
}
Run Code Online (Sandbox Code Playgroud)

unwrappedValue不一定是常数.

Scala的Option monad(与Swift的Optional基本相同)具有getOrElse用于此目的的方法:

val myValue = optionalValue.getOrElse(defaultValue)
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?斯威夫特有一个紧凑的方式吗?或者,如果失败,是否可以getOrElse在可选的扩展中定义?

optional swift

133
推荐指数
3
解决办法
6万
查看次数

iPhone X上的横向UICollectionView

当使用横向iPhone X时,您应该检查safeAreaInsets以在左侧和右侧制作适当大的水槽.UITableView具有新insetsContentViewsToSafeArea属性(默认为true),可自动将单元格内容保存在安全区域中.

我很惊讶UICollectionView似乎没有类似的东西.我希望对于垂直滚动的集合视图,左侧和右侧在横向时将插入安全区域(相反,如果需要纵向插入水平滚动的集合视图).

确保此行为的最简单方法似乎是添加到集合视图控制器:

- (void)viewSafeAreaInsetsDidChange {
    [super viewSafeAreaInsetsDidChange];
    UIEdgeInsets contentInset = self.collectionView.contentInset;
    contentInset.left = self.view.safeAreaInsets.left;
    contentInset.right = self.view.safeAreaInsets.right;
    self.collectionView.contentInset = contentInset;
}
Run Code Online (Sandbox Code Playgroud)

...假设contentInset.left/right通常为零.

(注意:是的,对于UICollectionViewController,需要self.view.safeAreaInsets;在调用此时,更改为safeAreaInsets奇怪尚未传播到self.collectionView)

我错过了什么吗?该样板很简单,但现在对于触及屏幕边缘的每个集合视图都是有效的.Apple默认情况下没有提供启用它的功能,这似乎很奇怪.

uikit ios uicollectionview ios11 iphone-x

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

标签 统计

ios ×1

ios11 ×1

iphone-x ×1

optional ×1

swift ×1

uicollectionview ×1

uikit ×1