bugfix> ios > 投稿
Hi there!I meet the following code in IOS swift development class. 
class UpdateToAttributedStringsPolicy: NSEntityMigrationPolicy {
override func createDestinationInstances(forSource sInstance: NSManagedObject, in mapping: NSEntityMapping, manager: NSMigrationManager) throws {
    // Call super
    try super.createDestinationInstances(forSource: sInstance, in: mapping, manager: manager)
    // Get the (updated) destination Note instance we're modifying
    guard let destination = manager.destinationInstances(forEntityMappingName: mapping.name, sourceInstances: [sInstance]).first else { return }
    // Use the (original) source Note instance, and instantiate a new
    // NSAttributedString using the original string
    if let text = sInstance.value(forKey: "text") as? String {
        destination.setValue(NSAttributedString(string: text), forKey: "attributedText")
    }
  }
}

このコード行で

override func createDestinationInstances(forSource sInstance: NSManagedObject, in mapping: NSEntityMapping, manager: NSMigrationManager) throws

sInstanceとmanagerは、関数createDestinationInstancesのパラメーター名ですが、

try super.createDestinationInstances(forSource: sInstance, in: mapping, manager: manager)

彼らは戻り名になりますが、これはどのように機能しますか?そして、なぜここでsuperを呼び出すのですか?それはsuper.initを意味しますか?

ありがとう!

回答 1 件
  • 私があなたを正しく理解していれば、あなたはどのように sInstance を使用できるかを尋ねています  単なるラベルであっても値として?

    ここで述べたように(関数宣言-> パラメーター名セクション)、 sInstance  実際にはラベルではなくパラメータ名です。

    parameter_name: parameter_type
    argument_label parameter_name: parameter_type
    _ parameter_name: parameter_type
    
    

    これは正しいですが

    try super.createDestinationInstances(forSource: sInstance, in: mapping, manager: manager)
    
    

    これは間違っています:

    try super.createDestinationInstances(forSource: forSource, in: in, manager: manager)
    
    

あなたの答え