小编Leo*_*bus的帖子

如何使用 Swift 更新数组中所有元素的特定属性值

假设我已经有一个数组,ViewHolder其中viewHolderList: [ViewHolder]. 我希望所有isMarried元素字段在一行中都为“ false ”而不循环。

struct ViewHolder {
    var name: String?
    var age: Int?
    var isMarried: Bool = true
}
Run Code Online (Sandbox Code Playgroud)

arrays swift

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

如何使用户仅在 SwiftUI 文本字段中输入数字与货币,同时保留 $ 和 .?

现在,我有以下内容:

private var currencyFormatter: NumberFormatter = {
    let f = NumberFormatter()
    // allow no currency symbol, extra digits, etc
    f.isLenient = true
    f.numberStyle = .currency
    return f
}()
Run Code Online (Sandbox Code Playgroud)
TextField("Total", value: $totalInput, formatter: currencyFormatter)
    .font(.largeTitle)
    .padding()
    .background(Color.white)
    .foregroundColor(Color.black)
    .multilineTextAlignment(.center)
Run Code Online (Sandbox Code Playgroud)

我希望文本字段以 0.00 美元作为占位符开始,但是当用户开始输入时,前两个输入将以美分填充...因此 5055 将逐渐显示为:

步骤 1(用户点击 5 次):0.05 美元
步骤 2(用户点击 0 次):0.50 美元
步骤 3(用户点击 5 次):5.05 美元
步骤 4(用户点击 5 次):50.55 美元

如果金额大于 $999,则将插入逗号。

如何实现这一目标?现在我的totalInput 类型是Double?。

currency textfield swift swiftui

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

为什么我的 CustomType 无法符合 Decodable,即使我符合它?

我有一个符合 Decodable 的 CustomType,当我想将它用作我的函数所需的值时,Xcode 抱怨 CustomType 不符合 Decodable!我应该明确地使 CustomType 构造发生,我也这样做了,但它没有解决问题!我在这里缺少什么?

错误:

类型“CustomType.Type”不能符合“Decodable”

let stringOfJSON: String = """
{ "name": "SwiftPunk", "age": 35 }
"""

let dataOfJSON: Data? = stringOfJSON.data(using: String.Encoding.utf8)
Run Code Online (Sandbox Code Playgroud)
struct CustomType: Decodable {
    
    enum Codingkeys: String, CodingKey {
        case name, age
    }
    
    var name: String
    var age: Int
    
    init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: Codingkeys.self)
        name = try container.decode(String.self, forKey: .name)
        age = try container.decode(Int.self, forKey: .age)
    }
    
    
}
Run Code Online (Sandbox Code Playgroud)
func decoderFunction<T: Decodable>(dataOfJSON: Data?, customType: T, …
Run Code Online (Sandbox Code Playgroud)

swift

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

使用 HSL 亮度因子从 SKColor 返回较浅的颜色

我有一个 iOS SKColor,我想将其转换为较浅的阴影(即不透明,没有不透明度/无透明度),因此我想使用 HSL 亮度实现一个函数,该函数返回 SKColor。IE。在函数内部,将原始 SKColor 转换为 HSL 等效值,然后对 HSL 亮度应用一个值以获得更浅的色调,然后将此 HSL 颜色转换回我可以使用的 SKColor。

uicolor ios sprite-kit swift

2
推荐指数
1
解决办法
1631
查看次数

iOS Swift:声音没有播放

在我的iOS Swift应用程序中,我试图点击一个按钮播放声音.

func playSound()
    {
        var audioPlayer = AVAudioPlayer()
        let soundURL = NSBundle.mainBundle().URLForResource("doorbell", withExtension: "mp3")
        audioPlayer = AVAudioPlayer(contentsOfURL: soundURL, error: nil)
        audioPlayer.play()
}
Run Code Online (Sandbox Code Playgroud)

我正在iOS iPhone模拟器中运行该应用程序.我已将doorbell.mp3添加到应用程序中.在调试模式下,我可以看到soundURL有一个值,它不是零.

没有错误,但声音没有播放.

iphone audio ios swift

2
推荐指数
1
解决办法
2043
查看次数

如何在Swift中使用Calendar nextDate方法查找下一个小时时间

我想找到下一个小时的时间.例如

现在是:4/9/16,10:12:34 AM GMT + 10我想得到:4/9/16,11:00:00 AM GMT + 10

所以我尝试使用Calendar.current.nextDate,但我得到了奇怪的回应.示例代码如下.

let dateFormatter = DateFormatter()
    dateFormatter.dateStyle = .short
    dateFormatter.timeStyle = .long

    var dateComponents = DateComponents()
    dateComponents.minute = 0
    dateComponents.second = 0

    let beginDate = Date(timeIntervalSince1970: 0)
    var beginDateComponents = Calendar.current.dateComponents(in: TimeZone.current, from: beginDate)
    beginDateComponents.minute = 0
    beginDateComponents.second = 0
    let modifiedDate = Calendar.current.date(from: beginDateComponents)!

    let nextHourlyTime = Calendar.current.nextDate(after: modifiedDate, matching: dateComponents, matchingPolicy: .nextTime)!

    print("modifiedDate: \(dateFormatter.string(from: modifiedDate))")
    print("beginDate: \(dateFormatter.string(from: beginDate))")
    print("nextHourlyTime: \(dateFormatter.string(from: nextHourlyTime))")

    /*
     modifiedDate: 1/1/70, 10:00:00 AM GMT+10
     beginDate: 1/1/70, …
Run Code Online (Sandbox Code Playgroud)

ios swift

2
推荐指数
1
解决办法
1026
查看次数

计算Swift字符串中的行数

从Web服务中读取一个中等大小的文件(大约500kByte)后,我有一个lines最初编码的常规Swift String().isolatin1.在实际拆分之前,我想计算行数(快速),以便能够初始化进度条.

实现这一目标的最好的Swift成语是什么?

我想出了以下内容:

let linesCount = lines.reduce(into: 0) { (count, letter) in
   if letter == "\r\n" {
      count += 1
   }
}
Run Code Online (Sandbox Code Playgroud)

这看起来并不太糟糕,但我问自己是否有更短/更快的方法.该characters属性提供对一系列Unicode字素的访问,这些字形\r\n仅作为一个实体处理.用all检查这个CharacterSet.newlines不起作用,因为CharacterSet它不是一组CharacterUnicode.Scalar在我的书中有一组(在我的书中有点反直觉),它是一组代码点(其中\ r \n计为两个代码点),而不是字形.试

var lines = "Hello, playground\r\nhere too\r\nGalahad\r\n"
lines.unicodeScalars.reduce(into: 0) { (cnt, letter) in
if CharacterSet.newlines.contains(letter) {
    cnt += 1
}
Run Code Online (Sandbox Code Playgroud)

}

将计数为6而不是3.因此这比上述方法更通用,但它不能正确用于CRLF行结尾.

有没有办法允许更多的行结束约定(如CharacterSet.newlines)仍然可以实现CRLF的正确结果?可以使用更少的代码计算行数(同时仍然保持可读性)?

unicode line-endings swift

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

Why do I have to unwrap a weak self?

I have created a class called VerifyObject, that contains a function with a signature like that

typealias handlerCodeID = (String) ->Void

class func checkPause(withID:String?,
  runOnPause: handlerCodeID?) 
Run Code Online (Sandbox Code Playgroud)

When I run that, I need to pass a weak self reference to inside the closure, using

VerifyObject.checkPause(withID: "abcde", 
  runOnPause: {[weak self] (objectID) in
    self.doSomething()
})
Run Code Online (Sandbox Code Playgroud)

Xcode complains that the self in doSomething must be unwrapped to

self!.doSomething()
Run Code Online (Sandbox Code Playgroud)

why? Does not make sense.

closures swift

2
推荐指数
1
解决办法
79
查看次数

更改 ContextMenu 中 UIImage 的弹出大小?

假设您有一个图像的上下文菜单,长按时会弹出该图像。如何使弹出窗口更大,但保持相同的尺寸?


ViewControllerTableViewCell: UITableViewCell, UIContextMenuInteractionDelegate {

func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
    UIContextMenuConfiguration(identifier: nil, previewProvider: nil)  { _ in
        let share = UIAction(title: "", image: UIImage(systemName: "")) { _ in
            // share code
        }
        return UIMenu(title: "", children: [share])
    }
}
Run Code Online (Sandbox Code Playgroud)
override func awakeFromNib() {
    super.awakeFromNib()
    immy.isUserInteractionEnabled = true
    immy.addInteraction(UIContextMenuInteraction(delegate: self))
}
Run Code Online (Sandbox Code Playgroud)

contextmenu uiimageview firebase swift uicontextmenuinteraction

2
推荐指数
1
解决办法
1755
查看次数

如何在 Swift 中对 simd_float4x4 元素数组进行编码(将 simd_float4x4 转换为 Data)?

我正在构建一个应用程序,用于从 iPhone TrueDepth 摄像头捕获面部跟踪数据。

我需要将此数据写入文件,以便我可以将其用作另一个应用程序的基础。

在应用程序中,数据被保存到四个单独的数组中,其中一个包含 ARFaceGeometry 对象,另外三个包含作为 simd_float4x4 矩阵的变换坐标。

我将数组转换为数据对象,archivedData(withRootObject: requiringSecureCoding:)然后调用write(to:)它们来创建文件。

包含 ARFaceGeometry 数据的文件已正确写入和读回。但是这三个 simd_float4x4 数组并未被写入,尽管这样做的代码是相同的。与我的打印日志一起,给出的错误是“无法识别的选择器发送到实例”。

特性:

var faceGeometryCapture = [ARFaceGeometry]()
var faceTransformCapture = [simd_float4x4]()
var leftEyeTransformCapture = [simd_float4x4]()
var rightEyeTransformCapture = [simd_float4x4]()

var faceGeometryCaptureFilePath: URL!
var faceTransformCaptureFilePath: URL!
var leftEyeTransformCaptureFilePath: URL!
var rightEyeTransformCaptureFilePath: URL!
Run Code Online (Sandbox Code Playgroud)

建立文件 URL 的代码:

let fileManager = FileManager.default
let dirPaths = fileManager.urls(for: .documentDirectory,
                        in: .userDomainMask)
        
faceGeometryCaptureFilePath = dirPaths[0].appendingPathComponent("face-geometries.txt")
faceTransformCaptureFilePath = dirPaths[0].appendingPathComponent("face-transforms.txt")
leftEyeTransformCaptureFilePath = dirPaths[0].appendingPathComponent("left-eye-transforms.txt")
rightEyeTransformCaptureFilePath = dirPaths[0].appendingPathComponent("right-eye-transforms.txt")
Run Code Online (Sandbox Code Playgroud)

将数据写入文件的代码:

do {
    let …
Run Code Online (Sandbox Code Playgroud)

arrays nskeyedarchiver ios swift

2
推荐指数
1
解决办法
2380
查看次数