小编Dou*_*oug的帖子

有什么区别.*?和.*正则表达式?

我正在尝试使用正则表达式将字符串分成两部分.字符串格式如下:

text to extract<number>
Run Code Online (Sandbox Code Playgroud)

我一直在使用(.*?)<,<(.*?)>哪个工作正常,但在阅读了一点regex之后,我才开始想知道为什么我需要?表达式中的.我通过这个网站找到它们之后才这样做,所以我不确定它们之间的区别.

regex regex-greedy

126
推荐指数
3
解决办法
9万
查看次数

你如何从 Swift 向 os_log 传递错误?

我正在尝试从 catch 块记录错误。文件说明如下:

要格式化日志消息,请使用标准 NSString 或 printf 格式字符串

除了标准格式字符串说明符(例如 %@ 和 %d)之外,日志记录系统还通过以 %{value_type}d 格式内联表示值类型来支持值的自定义解码。此外,说明符 %.*P 可用于解码任意二进制数据。该系统包括许多内置的值类型解码器,如表 3 所示。

errno %{errno}d 管道破裂

当我这样做时,我收到一个错误:

import os.log

do {
    try throwError()
} catch {
    os_log("Error: %{errno}d", log: .default, type: .error, error)
}
Run Code Online (Sandbox Code Playgroud)

但是编译器输出错误:

参数类型“错误”不符合预期类型“CVarArg”

有没有比error.localizedDescription作为参数传递更好的方法?

logging ios swift

6
推荐指数
1
解决办法
1891
查看次数

可以检测我的框架是作为主应用程序还是扩展程序的一部分运行?

在包含其应用程序和应用程序扩展的公共代码的iOS或OS X Framework中,有没有办法检测代码是在主应用程序或其扩展程序之一下运行?具体来说,我想检测框架是否被用作WatchKit扩展的一部分而不是App的iPhone部分.

UIDevice.currentDevice总是返回iPhone,就像运行代码一样.我相信我可以检查是否WKInterfaceDevice存在,但这似乎并不太优雅.

iphone frameworks objective-c ios watchkit

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

在Swift 4.0中使用CodingKeys枚举来忽略UIImage属性

我有以下结构.前3个属性从JSON解码,第4个属性用作缓存,如果图像被下载.

import UIKit

struct Thumbnail: Codable {
    let url: String
    let width: UInt
    let height: UInt

    var image: UIImage?

    enum CodingKeys: String, CodingKey {
        case url
        case width
        case height
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译Xcode时告诉我Thumbnail不符合Decodable协议.我知道UIImage不符合Codable,但据我所知,使用CodingKeys枚举应该忽略image协议?任何建议将不胜感激:)

ios swift codable

5
推荐指数
0
解决办法
483
查看次数

将浮动或颜色传递给Swift中的Metal片段着色器

我正在尝试在Metal中编写片段着色器,但无法理解如何传递单个值(例如float,float4或half4).我的着色器如下:

#include <metal_stdlib>
using namespace metal;

typedef struct {
    float4 renderedCoordinate [[position]];
} FullscreenQuadVertex;

vertex FullscreenQuadVertex fullscreenQuad(unsigned int vertex_id [[ vertex_id ]]) {
    float4x4 renderedCoordinates = float4x4(float4( -1.0, -1.0, 0.0, 1.0 ),
                                            float4(  1.0, -1.0, 0.0, 1.0 ),
                                            float4( -1.0,  1.0, 0.0, 1.0 ),
                                            float4(  1.0,  1.0, 0.0, 1.0 ));

    FullscreenQuadVertex outVertex;
    outVertex.renderedCoordinate = renderedCoordinates[vertex_id];

    return outVertex;
}

fragment float4 displayColor(device float4 *color [[ buffer(0) ]]) {
//    return float4(0.2, 0.5, 0.8, 1);
    return *color;
}
Run Code Online (Sandbox Code Playgroud)

我正在从MTKView子类传递颜色,如下所示:

import MetalKit

class …
Run Code Online (Sandbox Code Playgroud)

macos fragment-shader swift metal

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

当触发器是发布时 GitHub 的 upload-release-asset 操作的 upload_url ?

我正在尝试创建一个 GitHub 操作,该操作在发布版本时触发,并将构建我的项目并上传某些工件作为发布资产。我能找到的唯一示例依赖于使用该create-release操作,该操作失败,因为版本已经创建。我的工作流程文件是这样的:

name: Build for Release

on:
  release:
    types: [published]

jobs:
  build:

    runs-on: macos-latest

    steps:
    - uses: actions/checkout@v2
      
    - name: Build
      run: ...
      
    - name: Zip Asset
      run: ...

    - name: Upload Release Asset
      uses: actions/upload-release-asset@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        upload_url: ${{ ???? What Goes Here ???? }}
        asset_path: build/MyProject.zip
        asset_name: MyProject.zip
        asset_content_type: application/zip
Run Code Online (Sandbox Code Playgroud)

我的标签将是v0.1.0v0.1.1v0.2.0,并且发布名称与这些标签相匹配。

github github-actions

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

更新 SwiftUI 列表中选定的对象

当使用 SwiftUI 列表时,我有代码来更新所选对象,效果很好。但是,在所选对象发生更改之前,对所选对象的更改不会反映在列表中。

这是我的列表显示的类的简化版本。

class Item: ObservableObject {
    let id = UUID()
    @Published var name: String
    
    init(name: String) {
        self.name = name
    }
}

extension Item: Hashable {
    static func == (lhs: Item, rhs: Item) -> Bool {
        lhs.id == rhs.id
    }
    
    func hash(into hasher: inout Hasher) {
        hasher.combine(id)
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的观点的简化版本。

struct TestView: View {
    @State var items = [
        Item(name: "Item 1"),
        Item(name: "Item 2"),
        Item(name: "Item 3"),
        Item(name: "Item 4")
    ]
    @State var selectedItem: Item?
    
    var body: …
Run Code Online (Sandbox Code Playgroud)

swift swiftui swiftui-list

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