在我的reducer中,假设我最初有这种状态:
{
"loading": false,
"data": {
"-L1LwSwW97KkwdSnYvsc": {
"likeCount": 10,
"liked": false, // I want to update this property
"commentCount": 5
},
"-L1EY2_fqzn7sM1Mbf_F": {
"likeCount": 8,
"liked": true,
"commentCount": 22
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想更新对象liked内部的-L1LwSwW97KkwdSnYvsc属性,这是data对象内部并制作它true.这是我一直在尝试的,但显然,这是错误的,因为在我更新状态后,componentWillReceiveProps侦听状态更改的组件内的函数不会被触发:
var { data } = state;
data['-L1LwSwW97KkwdSnYvsc'].liked = !data['-L1LwSwW97KkwdSnYvsc'].liked;
return { ...state, data };
Run Code Online (Sandbox Code Playgroud)
你能说明为什么它是错的,我应该如何改变它以使它工作?
我在 Swift 中编写了一个图像选择器(NOT UIImagePickerController),按下“完成”后,我返回所选 PHAssets(图像或视频或两者)的 URL,然后将它们上传到 firebase 存储。
图像的 URL 如下所示: file:///var/mobile/Media/DCIM/101APPLE/IMG_1239.PNG
视频的 URL 如下所示: file:///var/mobile/Media/DCIM/101APPLE/IMG_1227.MOV
然后我显示 PHAsset。播放视频资产没有问题:
let player = AVPlayer(url: url)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = view.frame
playerLayer.videoGravity = .resizeAspectFill
view.layer.addSublayer(playerLayer)
player.play()
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用其 URL 显示图像时,出现“无权读取文件”错误:
do {
let data = try Data(contentsOf: url)
imageView.image = UIImage(data: data)
} catch {
print(error)
}
Run Code Online (Sandbox Code Playgroud)
我确实有权访问用户的照片库,这就是图像选择器工作正常的原因。我只是无法使用它们的 URL 读取图像文件。
我在想,也许我应该将图像资产复制到临时文件并从那里读取它,但是为什么视频资产可读但不是图像资产没有任何意义。
- - - - - - - 更新 - - - - - - -
这就是我获取 PHAsset 网址的方式 …
假设我有一个函数,它接受一系列“Person”对象。该序列可以是一个简单的数组,或者 RealmSwift 的 Result,或者 List:
// A simple array
func someFunction(people: [Person]) {
}
// Result
func someFunction(people: Result<Person>) {
}
// List
func someFunction(people: List<Person>) {
}
Run Code Online (Sandbox Code Playgroud)
我不想拥有这 3 个函数,而是只想要 1 个函数,该函数采用“Person”对象的通用序列,如下所示:
func someFunction(people: Sequence<Person>) {
}
Run Code Online (Sandbox Code Playgroud)
这样,我可以将数组、结果或列表传递给函数,而不必担心类型不匹配。但显然这在 Swift 中是不允许的。那我该怎么做呢?
我试图在Swift的文档文件夹中获取文件列表,这是一个代码片段:
let fileManager = FileManager.default
if let dir = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first {
print(dir.absoluteString) // print 1
do {
let files = try fileManager.contentsOfDirectory(atPath: dir.absoluteString)
print(files) // print 2
} catch {
print(error.localizedDescription) // print 3
}
}
Run Code Online (Sandbox Code Playgroud)
然后“ print 1”打印:
文件:///用户/.../.../文档/
和“ print 3”打印:
文件夹“文档”不存在。
当前,该文件夹中保存了很多文件,至少我的default.realm文件在那里。为什么会这样?