小编Dáv*_*tor的帖子

SwiftUI 中 ButtonStyle 的枚举

可以这样设置按钮样式吗...?

Button() { }
   .buttonStyle(.default)
Run Code Online (Sandbox Code Playgroud)

而不是这个...?

Button() { }
   .buttonStyle(DefaultButtonStyle())
Run Code Online (Sandbox Code Playgroud)

我尝试编写扩展代码,但它不起作用。

extension ButtonStyle {
    static var `default`: DefaultButtonStyle {
        DefaultButtonStyle()
    }
}
Run Code Online (Sandbox Code Playgroud)

它说:Static member 'default' cannot be used on protocol metatype 'ButtonStyle.Protocol'

swift swiftui

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

MainActor 隔离的可变存储属性为何会出现可发送错误?

我正在尝试使一个类符合Sendable. 我有一些可变的存储属性导致了问题。但是,我无法理解的是 MainActor 独立属性不允许我的类符合 Sendable。但是,如果我将整个班级标记为 a @MainActor,那就没问题了。然而,我实际上并不想让全班都遵守@MainActor

举个例子,看下面的代码:

final class Article: Sendable {
  @MainActor var text: String = "test"
}
Run Code Online (Sandbox Code Playgroud)

它给出了这样的警告:Stored property 'text' of 'Sendable'-conforming class 'Article' is mutable

有人可以解释为什么吗?我认为与演员隔离会很好。

swift swift-concurrency

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

AVPlayer 去除顶部和底部的黑条/背景(Swift)

快速提问,有人知道如何去除视频顶部和底部的黑条吗?我刚开始使用 AVPlayer,我只是在这里和那里删除代码以尝试删除黑色图层。感谢那些可以帮助我的人,谢谢!

视图控制器

import UIKit
import AVKit
import AVFoundation
private var looper: AVPlayerLooper?

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let path = Bundle.main.path(forResource: "Innie-Kiss", ofType:"mp4")
        let player = AVQueuePlayer(url: URL(fileURLWithPath: path!))
        looper = AVPlayerLooper(player: player, templateItem: AVPlayerItem(asset: AVAsset(url: URL(fileURLWithPath: path!))))
        let controller = AVPlayerViewController()
        controller.player = player
        let screenSize = UIScreen.main.bounds.size
        let videoFrame = CGRect(x: 0, y: 200, width: screenSize.width, height: (screenSize.height - 130) / 2)
        controller.view.frame = videoFrame
        self.view.addSubview(controller.view)
        player.play()
    }

}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

ios avplayer swift

4
推荐指数
1
解决办法
2893
查看次数

如何扩展float3或任何其他内置类型以符合Codable协议?

在尝试使用基本JSONEncoder序列化float3对象数组时,发现float3不符合Codable协议,因此无法完成.

我尝试按照下面的编码和解码自定义类型的建议编写一个基本扩展,但是会'self' used before all stored properties are initialized在init中为每个赋值行呈现错误.我假设这是因为编译器不确定Float.self是否在float3初始化之前定义,但我不知道如何解决这个问题.

此外,init的结尾说Return from initializer without initializing all stored properties我假设除了x,y和z之外还有float3属性,但我想知道是否有办法默认/忽略这些,和/或如何找到完整除了挖掘simd中的所有float3扩展之外的属性列表.

如果您对如何做到这一点有任何想法,那么分享它们将非常感激.谢谢!

import SceneKit

extension float3: Codable {
    public init(from decoder: Decoder) throws {
        let values = try decoder.container(keyedBy: CodingKeys.self)
        x = try values.decode(Float.self, forKey: .x)
        y = try values.decode(Float.self, forKey: .y)
        z = try values.decode(Float.self, forKey: .z)
    }

    public func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        try container.encode(x, forKey: .x)
        try …
Run Code Online (Sandbox Code Playgroud)

initialization scenekit swift swift4 codable

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

可解码符合枚举类型的属性

我有这个枚举:

enum DealStatus:String {
    case PENDING = "Pending"
    case ACTIVE = "Active"
    case STOP = "Stop"
    case DECLINED = "Declined"
    case PAUSED = "Paused"
}
Run Code Online (Sandbox Code Playgroud)

和结构:

struct ActiveDeals: Decodable {
    let keyword:            String
    let bookingType:        String
    let expiryDate:         Int
    let createdAt:          Int?
    let shopLocation:       String?
    let dealImages:         [DealImages]?
    let dealStatus:         String?
    let startingDate:       Int?
}
Run Code Online (Sandbox Code Playgroud)

在结构中我试图将枚举作为类型分配dealStatus如下:

struct ActiveDeals: Decodable {
        let keyword:            String
        let bookingType:        String
        let expiryDate:         Int
        let createdAt:          Int?
        let shopLocation:       String?
        let dealImages:         [DealImages]? …
Run Code Online (Sandbox Code Playgroud)

enums struct swift decodable

4
推荐指数
1
解决办法
1486
查看次数

在特定情况下不调用 deinit

我有以下测试用例:我希望deinit在程序终止时被调用,但它从来没有。我是 Swift 的新手,但不认为这是预期的行为。(这不是在操场上)

class Test
{
   init() {
      print( "init" )
   }

   deinit {
      print( "deinit" )
   }
}

print("Starting app")

var test = Test()

print( "Ending App" )
Run Code Online (Sandbox Code Playgroud)

输出是:

Starting app
init
Ending App
Program ended with exit code: 0
Run Code Online (Sandbox Code Playgroud)

如果我将代码放在一个函数中然后调用该函数,我会得到预期的结果

Starting app
init
Ending App
deinit
Program ended with exit code: 0
Run Code Online (Sandbox Code Playgroud)

不应该在程序终止时调用对象的 deinit 吗?

automatic-ref-counting swift

4
推荐指数
1
解决办法
930
查看次数

如何绘制矩形的角(没有连接它们的线)

我有一个CGRect价值,需要在它周围画一个边框。我只希望在没有任何线条连接它们的情况下绘制角落。

像这样的东西...

在此处输入图片说明

我将如何使用 swift 绘制这个数字?

cashapelayer ios uibezierpath swift

4
推荐指数
1
解决办法
1432
查看次数

如何更改 JSON 键名 Swift?

在我的应用程序中,我使用相同的键名来获取到处的数据,现在在 json 响应中,数据是相同的,但在一个地方键名发生了更改,所以我想重命名 json 中数组的键名,这就是我要搜索的内容关于堆栈溢出但无法找到任何可靠的方法请指导我任何好的方法

{"status":"success","msg":"deleted","pro_data":[]}
Run Code Online (Sandbox Code Playgroud)

我想要带有这些键的 JSON:

{"status":"success","msg":"deleted","Images":[]}
Run Code Online (Sandbox Code Playgroud)

json ios swift swifty-json

4
推荐指数
1
解决办法
3417
查看次数

iOS WatchOS-WatchKit App和WatchKit App extension之间有什么区别?

我正在尝试创建一个iOS WatchOS5并发症,并看到了许多教程和Apple文档。他们谈论:

  • WatchKit应用
  • WatchKit App扩展

iOS WatchKit App和WatchKit App Extension有什么区别?

如果我想在手机应用程序和手表应用程序之间共享数据,是否需要同时使用手表连接框架?

apple-watch watchkit apple-watch-complication watchconnectivity watchos-5

4
推荐指数
1
解决办法
877
查看次数

如果我想从 Codable 中排除某些属性,为什么这些属性必须是可选的?

我有以下内容struct

struct Checklist : Codable {
    let id: Int64
    var text: String?
    var checked: Bool
    var visible: Bool
    var version: Int64

    private enum CodingKeys: String, CodingKey {
        case id
        case text
        case checked
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到编译器错误

类型“清单”不符合“可解码”协议

我可以解决的唯一方法是将排除的属性更改为可选。

struct Checklist : Codable {
    let id: Int64
    var text: String?
    var checked: Bool
    var visible: Bool?
    var version: Int64?

    private enum CodingKeys: String, CodingKey {
        case id
        case text
        case checked
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以知道为什么会这样吗?这是解决此类编译器错误的唯一正确方法吗?

swift codable

4
推荐指数
1
解决办法
505
查看次数